SQL CTE и ORDER BY влияют на набор результатов

Я вставил очень упрощенную версию своего SQL-запроса ниже. Проблема, с которой я сталкиваюсь, заключается в том, что оператор ORDER BY влияет на результаты выбора моего CTE. Я не мог понять, почему это так, я изначально думал, что в CTE я выполняю некоторый оператор SELECT , затем ORDER BY должен работать с ЭТИМИ результатами.

К сожалению, поведение, которое я (Индексируется в обратном порядке по идентификатору)

ID,   Date
9600  2010-10-12
9599  2010-09-08
9598  2010-08-31
9597  2010-08-31
9596  2010-08-30
9595  2010-08-11
9594  2010-08-06
9593  2010-08-05
9592  2010-08-02
....
9573  2010-08-10
....
8174  2010-08-05
....
38    2029-12-20

Мой основной запрос:

;with results as(
select TOP 10 ID, Date
from dbo.items
)
SELECT ID
FROM results

запрос возвращает:

ID,   Date
9600  2010-10-12
9599  2010-09-08
9598  2010-08-31
9597  2010-08-31
9596  2010-08-30
9595  2010-08-11
9594  2010-08-06
9593  2010-08-05
9592  2010-08-02

Мой запрос с запросом ORDER BY

;with results as(
select TOP 10 ID, Date
from dbo.items
)
SELECT ID
FROM results
ORDER BY Date DESC

возвращает:

ID,   Date
38    2029-12-20
9600  2010-10-12
9599  2010-09-08
9598  2010-08-31
9597  2010-08-31
9596  2010-08-30
9595  2010-08-11
9573  2010-08-10
9594  2010-08-06
8174  2010-08-05

Кто-нибудь может объяснить, почему первый запрос будет возвращают только идентификаторы, которые находятся в первых 10 таблицах, а второй запрос возвращает первые 10 из всей таблицы (после применения сортировки).

7
задан A-K 13 October 2010 в 14:57
поделиться