Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

EXISTS vs JOIN e uso da cláusula EXISTS


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 (JOIN pode causar linhas duplicadas se os valores forem repetidos)
  • Você deseja verificar a existência (use em vez de LEFT OUTER JOIN...NULL condiçã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.