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

SQL JOIN vs desempenho IN?


De um modo geral, IN e JOIN são consultas diferentes que podem gerar resultados diferentes.
SELECT  a.*
FROM    a
JOIN    b
ON      a.col = b.col

não é o mesmo que
SELECT  a.*
FROM    a
WHERE   col IN
        (
        SELECT  col
        FROM    b
        )

, a menos que b.col é único.

No entanto, este é o sinônimo para a primeira consulta:
SELECT  a.*
FROM    a
JOIN    (
        SELECT  DISTINCT col
        FROM    b
        )
ON      b.col = a.col

Se a coluna de junção for UNIQUE e marcadas como tal, ambas as consultas geram o mesmo plano em SQL Server .

Se não for, então IN é mais rápido que JOIN em DISTINCT .

Veja este artigo no meu blog para obter detalhes de desempenho:
  • IN vs. JOIN vs. EXISTS