En términos generales, IN y JOIN son consultas diferentes que pueden arrojar resultados diferentes.
SELECT a.*
FROM a
JOIN b
ON a.col = b.col
no es lo mismo que
SELECT a.*
FROM a
WHERE col IN
(
SELECT col
FROM b
)
, a menos que b.col es único.
Sin embargo, este es el sinónimo de la primera consulta:
SELECT a.*
FROM a
JOIN (
SELECT DISTINCT col
FROM b
)
ON b.col = a.col
Si la columna de unión es UNIQUE y marcadas como tales, ambas consultas producen el mismo plan en SQL Server .
Si no es así, entonces IN es más rápido que JOIN en DISTINCT .
Consulte este artículo en mi blog para obtener detalles sobre el rendimiento:
INfrente aJOINfrente aEXISTS