Over het algemeen geldt IN
en JOIN
zijn verschillende zoekopdrachten die verschillende resultaten kunnen opleveren.
SELECT a.*
FROM a
JOIN b
ON a.col = b.col
is niet hetzelfde als
SELECT a.*
FROM a
WHERE col IN
(
SELECT col
FROM b
)
, tenzij b.col
is uniek.
Dit is echter het synoniem voor de eerste zoekopdracht:
SELECT a.*
FROM a
JOIN (
SELECT DISTINCT col
FROM b
)
ON b.col = a.col
Als de deelnamekolom UNIQUE
is en als zodanig gemarkeerd, leveren beide zoekopdrachten hetzelfde plan op in SQL Server
.
Zo niet, dan IN
is sneller dan JOIN
op DISTINCT
.
Zie dit artikel in mijn blog voor prestatiedetails:
IN
vs.JOIN
vs.EXISTS