Generellt sett, IN
och JOIN
är olika frågor som kan ge olika resultat.
SELECT a.*
FROM a
JOIN b
ON a.col = b.col
är inte samma sak som
SELECT a.*
FROM a
WHERE col IN
(
SELECT col
FROM b
)
, såvida inte b.col
är unik.
Detta är dock synonymen till den första frågan:
SELECT a.*
FROM a
JOIN (
SELECT DISTINCT col
FROM b
)
ON b.col = a.col
Om sammanfogningskolumnen är UNIQUE
och markerade som sådana, ger båda dessa frågor samma plan i SQL Server
.
Om det inte är det, IN
är snabbare än JOIN
på DISTINCT
.
Se den här artikeln i min blogg för information om prestanda:
IN
kontraJOIN
kontraEXISTS