【发布时间】:2021-05-17 04:43:40
【问题描述】:
我以为下面显示的两个 SQL 语句在功能上是相同的,但显然我错了,因为它们返回的结果不同。
谁能解释一下?
select count(*)
from t
where t.id in (select distinct v_id from v)
select count(*)
from t
join v on t.id = v.v_id
【问题讨论】:
-
技术上的区别在于
IN是一个半连接,它只是返回一个是/否来判断是否匹配。顺便说一句,distinct是不必要的,一个好的优化器会忽略它。 -
您会更好地理解这一点,只需简单地删除计数,将所有表的主键列(实际上只需要 PK 列)添加到选择列表中,适当地排序,然后简单地比较结果集。
标签: sql sql-server tsql join inner-join