Secara umum, IN dan JOIN adalah kueri berbeda yang dapat menghasilkan hasil berbeda.
SELECT a.*
FROM a
JOIN b
ON a.col = b.col
tidak sama dengan
SELECT a.*
FROM a
WHERE col IN
(
SELECT col
FROM b
)
, kecuali b.col unik.
Namun, ini adalah sinonim untuk kueri pertama:
SELECT a.*
FROM a
JOIN (
SELECT DISTINCT col
FROM b
)
ON b.col = a.col
Jika kolom bergabung adalah UNIQUE dan ditandai demikian, kedua kueri ini menghasilkan paket yang sama di SQL Server .
Jika tidak, maka IN lebih cepat dari JOIN pada DISTINCT .
Lihat artikel ini di blog saya untuk detail kinerja:
INvs.JOINvs.EXISTS