Acho que você está perdendo o
EXISTS
cláusula. A consulta a seguir seleciona todas as categorias, para as quais existe pelo menos uma linha na tabela de interseção.
SELECT category_name
FROM categories c
WHERE EXISTS (
SELECT 1
FROM assigned_cat ac
WHERE ac.category_id = c.category_id
)