MS SQL 查询结果因列集而异

MS SQL query results vary depending on set of columns

请帮我找到以下问题的解决方案。 我有 2 个问题:

SELECT tu
FROM testview1
WHERE tu = 1;
SELECT *
FROM testview1
WHERE tu = 1;

第一个查询 returns 21 行,第二个 - 36。 testview1 是一个有 3 个列的视图,它们都是整数。

CREATE VIEW testview1 AS
  SELECT
    rn,
    tu,
    id
  FROM t1
  UNION ALL
  SELECT
    rn,
    tu,
    id
  FROM t2

造成这种差异的原因是什么?

您的视图有 top () 而没有 order by,因此此 select 的结果取决于服务器选择 return 您的行的顺序。

由于请求的列不同,因此两个查询产生了 2 个不同的计划,并且服务器在 "right" 计划中选择了 ODRERED 索引扫描,在 "wrong" 计划中选择了 NOT ORDERED

因此,不同的行进一步过滤,最终的行数不同