一般来说,IN
和JOIN
是可以产生不同结果的不同查询.
SELECT a.*
FROM a
JOIN b
ON a.col = b.col
不一样
SELECT a.*
FROM a
WHERE col IN
(
SELECT col
FROM b
)
,除非b.col
是唯一的.
但是,这是第一个查询的同义词:
SELECT a.*
FROM a
JOIN (
SELECT DISTINCT col
FROM b
)
ON b.col = a.col
如果连接列为UNIQUE
并标记为UNIQUE
,则这两个查询都会在SQL Server
中生成相同的计划.
如果不是,那么IN
比DISTINCT
的JOIN
快.
有关性能详细信息,请参阅我博客中的这篇文章: