Най-общо казано, IN
и JOIN
са различни заявки, които могат да дадат различни резултати.
SELECT a.*
FROM a
JOIN b
ON a.col = b.col
не е същото като
SELECT a.*
FROM a
WHERE col IN
(
SELECT col
FROM b
)
, освен ако b.col
е уникален.
Това обаче е синонимът на първата заявка:
SELECT a.*
FROM a
JOIN (
SELECT DISTINCT col
FROM b
)
ON b.col = a.col
Ако присъединителната колона е UNIQUE
и маркирани като такива, и двете тези заявки дават един и същ план в SQL Server
.
Ако не е, тогава IN
е по-бързо от JOIN
на DISTINCT
.
Вижте тази статия в моя блог за подробности за ефективността:
IN
срещуJOIN
срещуEXISTS