Generelt IN
og JOIN
er forskellige forespørgsler, der kan give forskellige resultater.
SELECT a.*
FROM a
JOIN b
ON a.col = b.col
er ikke det samme som
SELECT a.*
FROM a
WHERE col IN
(
SELECT col
FROM b
)
, medmindre b.col
er unik.
Dette er dog synonymet for den første forespørgsel:
SELECT a.*
FROM a
JOIN (
SELECT DISTINCT col
FROM b
)
ON b.col = a.col
Hvis sammenføjningskolonnen er UNIQUE
og markeret som sådan, giver begge disse forespørgsler den samme plan i SQL Server
.
Hvis det ikke er det, så IN
er hurtigere end JOIN
på DISTINCT
.
Se denne artikel i min blog for detaljer om ydeevne:
IN
vs.JOIN
vs.EXISTS