1
resposta

USO DO JOIN

Por que nesse caso não se usa o JOIN? Sendo que se tem ligação com duas tabelas diferentes.

select a.nome from aluno a where not exists (select m.id from matricula m where m.aluno_id = a.id);

1 resposta

Fala Luka,

Neste caso ele quer buscar exatamente quem não tem matrícula, então lendo o comando é exatamente isso selecionar o nome de aluno onde não exista a seleção do id do aluno em matrícula, você pode usando JOIN, mas no caso seria RIGHT JOIN ou LEFT JOIN como nos exemplos abaixo:

   SELECT M.ID
      FROM MATRICULA M
RIGHT JOIN ALUNO A ON A.ID = M.ALUNO_ID
     WHERE MATRICULA.ID IS NULL //ONDE NÃO TENHA VINCULO COM A MATRÍCULA

   SELECT M.ID
      FROM ALUNO A 
LEFT JOIN MATRICULA M ON A.ID = M.ALUNO_ID
     WHERE MATRICULA.ID IS NULL //ONDE NÃO TENHA VINCULO COM A MATRÍCULA

Pelo que eu li o NOT EXISTS tem uma performance melhor.

Espero ter ajudado!

Abraços!