Obecně řečeno, IN a JOIN jsou různé dotazy, které mohou přinést různé výsledky.
SELECT a.*
FROM a
JOIN b
ON a.col = b.col
není totéž jako
SELECT a.*
FROM a
WHERE col IN
(
SELECT col
FROM b
)
, pokud není b.col je jedinečný.
Toto je však synonymum pro první dotaz:
SELECT a.*
FROM a
JOIN (
SELECT DISTINCT col
FROM b
)
ON b.col = a.col
Pokud je spojovací sloupec UNIQUE a označeny jako takové, oba tyto dotazy poskytují stejný plán v SQL Server .
Pokud není, pak IN je rychlejší než JOIN na DISTINCT .
Podrobnosti o výkonu naleznete v tomto článku na mém blogu:
INvs.JOINvs.EXISTS