为什么这行得通? CTE 中两个不同的 order by with union

Why does this work? Two different order bys with union in CTE

在使用 union 连接表时,您不能使用两个不同的 order by 子句。 (参见此 Whosebug)那么为什么当我使用 CTE 时它会起作用?

;with x as (
    select top 1 * from myTable order by col1
    union select top 1 * from myTable order by col2
)
select *
from x

CTE 中的查询无法独立运行。

基于Stu的评论:

Order by 对整个查询进行排序。在 CTE 中,您无法对内部查询进行排序,但可以生成 top。如果您将 order bytop 一起使用,它将为 top 提供服务,但不会对结果进行排序。例如,我将查询修改为 return top 5 并且可以看到结果是正确的数据但未排序。