SQL Server была реализована OFFSETи FETCHположения в рамках ORDER BYпункта, как указано на другие ответы и задокументированы в их документации.
Стандарт SQL, с другой стороны, имеет оба этих пункта как независимые:
<query expression> ::=
[ <with clause> ] <query expression body>
[ <order by clause> ] [ <result offset clause> ] [ <fetch first clause> ]
Если кто-то хочет, чтобы эта функция была реализована в полном соответствии со стандартом, он всегда может сделать запрос в группу SQL Server через канал Connect. Фактически, MS прокомментировала - в другом запросе о смещении и выборке:
Подключить элемент: SQL Denali: добавить счетчик строк в SELECTоператор - Алексей Рохин
Ответ: Опубликовано Microsoft 24/11/2010 в 11:34
Требование, которое OFFSET/FETCHтребует, ORDER BYявляется ограничением в этом выпуске. В стандарте ANSI SQL (SQL: 2011), где предлагаются новые OFFSET/FETCHпредложения, ORDER BYнеобязательно. Ограничение в SQL Server связано с ограничением в нашей технологии синтаксического анализа, которая не может обрабатывать необязательный синтаксис без создания OFFSETзарезервированного ключевого слова. Мы можем удалить это в будущем.
Теперь что касается ...
До тех пор, если кто-то хочет использовать OFFSETи FETCHбез конкретного ORDER BY, обходной путь должен добавить порядок «ничего не делать» по предложению. Пример:
SELECT
...
ORDER BY (SELECT NULL)
OFFSET 0 ROWS
FETCH NEXT 1 ROWS ONLY;