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:
IN
vs.JOIN
vs.EXISTS