Um outro aluno abriu um tópico questionando algo parecido, e nesse tópico foi respondido que ambas as situações dariam no mesmo, porém estou tendo resultados diferentes referenciando tabelas com where e join.
Primeiro caso (referenciando com where):
select a.nome from aluno a where not exists (select m.id from matricula m where m.aluno_id = a.id);
Isso me retorna o nome do Paulo da Silva, que não tem nenhuma matrícula realizada.
Segundo caso (referenciando com join):
select a.nome from aluno a where not exists (select m.id from matricula m join aluno a on m.aluno_id = a.id);
Isso me retorna um empty set.
Tem algum erro no meu código ou realmente os dois casos vão dar um resultado diferente? Quando é mais adequado usar o where ou o join para referenciar campos de tabelas diferentes?