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:
INrispetto aJOINrispetto aEXISTS