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:
IN
vs.JOIN
vs.EXISTS