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:
INvs.JOINvs.EXISTS