SELECT DISTINCT 在使用 NOT IN 子句时是否与 SELECT 不同?

Does SELECT DISTINCT differ from SELECT when using a NOT IN clause?

我的

DELETE FROM FOO
WHERE [FOO_KEY] NOT IN
  (
    SELECT [FOO_KEY] FROM BAR
  )

查询 运行 慢得惊人。我知道BAR很大table,所以忍不住写

DELETE FROM FOO
WHERE [FOO_KEY] NOT IN
  (
    SELECT DISTINCT [FOO_KEY] FROM BAR
  )

但我记得有人告诉我:

  1. NULL 不是问题时(他们不在这里),INEXISTS 之间几乎没有任何区别。
  2. 当使用 EXISTS 时,您不需要使用 SELECT DISTINCT 并且这样做没有性能原因。

这让我有充分的理由相信 绝对可以保证 在此处添加 DISTINCT 不会有什么不同。对吗?

从功能的角度来看,有或没有 DISTINCT 的查询是相同的(它们将删除同一组行)。

从性能的角度来看,我确信 SQL 服务器将始终为两个查询生成相同的执行计划(但我无法证明这一点)。

对于其他数据库引擎,这可能有所不同。参见: