Ogólnie rzecz biorąc, IN
i JOIN
to różne zapytania, które mogą dawać różne wyniki.
SELECT a.*
FROM a
JOIN b
ON a.col = b.col
to nie to samo co
SELECT a.*
FROM a
WHERE col IN
(
SELECT col
FROM b
)
, chyba że b.col
jest wyjątkowy.
Jest to jednak synonim pierwszego zapytania:
SELECT a.*
FROM a
JOIN (
SELECT DISTINCT col
FROM b
)
ON b.col = a.col
Jeśli kolumna łącząca to UNIQUE
i oznaczone jako takie, oba te zapytania dają ten sam plan w SQL Server
.
Jeśli nie, to IN
jest szybszy niż JOIN
na DISTINCT
.
Zobacz ten artykuł na moim blogu, aby uzyskać szczegółowe informacje na temat wydajności:
IN
w porównaniu zJOIN
w porównaniu zEXISTS