Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Prestazioni SQL JOIN vs IN?

In generale, IN e JOIN sono query diverse che possono produrre risultati diversi.

SELECT  a.*
FROM    a
JOIN    b
ON      a.col = b.col

non è uguale a

SELECT  a.*
FROM    a
WHERE   col IN
        (
        SELECT  col
        FROM    b
        )

, a meno che b.col è unico.

Tuttavia, questo è il sinonimo della prima query:

SELECT  a.*
FROM    a
JOIN    (
        SELECT  DISTINCT col
        FROM    b
        )
ON      b.col = a.col

Se la colonna di unione è UNIQUE e contrassegnate come tali, entrambe queste query producono lo stesso piano in SQL Server .

Se non lo è, allora IN è più veloce di JOIN su DISTINCT .

Vedi questo articolo nel mio blog per i dettagli sulle prestazioni:

  • IN rispetto a JOIN rispetto a EXISTS