Boa tarde professor.
Tem uma dúvida em relação ao join.
Na linha:
String sql = "select m from Movimentacao m join m.categorias c where c = :pCategoria";
é criada uma condição que compara m.categorias com o parâmetro pCategoria. O valor do parâmetro pCategoria é o objeto categoria de id = 2, tendo em vista os seguintes trechos do de código:
Categoria categoria = new Categoria();
categoria.setId(2L);
TypedQuery<Movimentacao> query = em.createQuery(sql, Movimentacao.class);
query.setParameter("pCategoria", categoria);
A minha dúvida é quanto ao resultado da busca. Por que o retorno é Categorias: [Viagem - 1, Negócios - 2], se na busca é usada uma condição where c = :pCategoria e a categoria buscada é apenas uma, categoria.setId(2L), por que a busca retorna tanto a categoria de id 2 com a de id 1 se só e buscada a categoria de id 2.