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:
IN
frente aJOIN
frente aEXISTS