Здравствуйте, Kaifa, Вы писали:
K>выдаст ошибку? какая ему разница?
Во втором случае ORDER BY не нужен, т.к. не влияет на результат запроса никаким образом, в отличии от примера с ТОП. Но при обработке такой конструкции у engine-а будет такой выбор — проигнорировать ее (мне кажется, что так происходит в некоторых СУБД), тупо исполнить (что бессмысленно), выдать ошибку (как происходит в T-SQL).
Рискну предположить, что Майкрософт выбрала последний вариант для большей надежности, чтобы разработчики не оставляли ненужные строки (которые все равно не будут выполняться) и чтобы не было случайных ошибок (когда ORDER BY по ошибке прописали внутри подзапроса).
Кто-нибудь ведь напишет:
select top 1 * from (
select val
from #t
order by val
) s
А потом будет жаловаться, что случайная строка возвращается...