Existem dois erros no código mostrado na vídeo aula:
1 - A relação correta seria:
Path<Integer> pathCategoria = root.join("categorias", JoinType.LEFT).<Integer>get("id");
Assim garantimos que mesmo não havendo uma categoria vinculada em um produto será trazido resultados, por exemplo, quando buscamos por nome, da maneira que foi implementado, se existir um produto sem categoria, não haverá resultados mesmo que busque por um nome existente pois o padrão é do join é "inner join".
2 - Não chega bem a ser um erro, mas não faz sentido algum utilizar "like" e não usar "%" em algum dos lados da comparação, porque se fosse para fazer busca exata, bastaria "equal".
No meu coloquei assim:
Predicate predicateNome = criteriaBuilder.like(pathNome, "%"+nome+"%");