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

Um INNER JOIN pode oferecer melhor desempenho do que EXISTS


De um modo geral, INNER JOIN e EXISTS são coisas diferentes.

O primeiro retorna duplicatas e colunas de ambas as tabelas, o segundo retorna um registro e, sendo um predicado, retorna registros de apenas uma tabela.

Se você fizer uma junção interna em um UNIQUE coluna, eles exibem o mesmo desempenho.

Se você fizer uma junção interna em um conjunto de registros com DISTINCT aplicado (para se livrar das duplicatas), EXISTS geralmente é mais rápido.

IN e EXISTS cláusulas (com uma correlação equijoin) geralmente empregam um dos vários SEMI JOIN algoritmos que geralmente são mais eficientes que um DISTINCT em uma das mesas.

Veja este artigo no meu blog:
  • IN x JOIN x EXISTS