Im Allgemeinen IN
und JOIN
sind unterschiedliche Abfragen, die zu unterschiedlichen Ergebnissen führen können.
SELECT a.*
FROM a
JOIN b
ON a.col = b.col
ist nicht dasselbe wie
SELECT a.*
FROM a
WHERE col IN
(
SELECT col
FROM b
)
, es sei denn b.col
ist einzigartig.
Dies ist jedoch das Synonym für die erste Abfrage:
SELECT a.*
FROM a
JOIN (
SELECT DISTINCT col
FROM b
)
ON b.col = a.col
Wenn die Verbindungsspalte UNIQUE
ist und als solche gekennzeichnet, ergeben diese beiden Abfragen denselben Plan in SQL Server
.
Wenn nicht, dann IN
ist schneller als JOIN
auf DISTINCT
.
Einzelheiten zur Leistung finden Sie in diesem Artikel in meinem Blog:
IN
vs.JOIN
vs.EXISTS