EXISTS é usado para retornar um valor booleano, JOIN retorna uma outra tabela EXISTS é usado apenas para testar se uma subconsulta retorna resultados e causa um curto-circuito assim que o faz. JOIN é usado para estender um conjunto de resultados combinando-o com campos adicionais de outra tabela com a qual existe uma relação. No seu exemplo, as consultas são semanticamente equivalentes.
Em geral, use
EXISTS quando:- Você não precisa retornar dados da tabela relacionada
- Você tem dupes na tabela relacionada (
JOINpode causar linhas duplicadas se os valores forem repetidos) - Você deseja verificar a existência (use em vez de
LEFT OUTER JOIN...NULLcondição)
Se você tiver índices adequados, na maioria das vezes o
EXISTS terá um desempenho idêntico ao JOIN . A exceção está em subconsultas muito complicadas, onde normalmente é mais rápido usar EXISTS . Se o seu
JOIN chave não está indexada, pode ser mais rápido usar EXISTS mas você precisará testar para sua circunstância específica. JOIN sintaxe é mais fácil de ler e mais clara normalmente também.