Появление упорядоченного результирующего набора без ORDER BYпредложения часто является результатом сканирования, извлекающего строки в порядке индекса. Одна из причин, по которой сканирование в порядке индекса обычно выбирается в соответствии с READ COMMITTEDуровнем изоляции по умолчанию, заключается в том, что оно уменьшает вероятность нежелательных аномалий параллелизма, таких как многократное обнаружение одной и той же строки или полный пропуск некоторых строк. Это подробно описано в нескольких местах, в том числе в этой серии статей об уровнях изоляции.
С NOLOCKтабличной подсказкой это поведение смягчается, и доступ к таблице осуществляется при более терпимом READ UNCOMMITTEDуровне изоляции, который может сканировать данные в порядке размещения вместо порядка индекса. Как описано в этой ссылке, решение о том, использовать ли сканирование порядка распределения или индекса, остается за механизмом хранения. Этот выбор может меняться между выполнениями без изменения в плане запроса .
Это может звучать очень абстрактно, но может быть легче продемонстрировано с некоторыми запросами, использующими недокументированные функции к базе данных AdventureWorks2012 .
USE AdventureWorks2012;
GO
-- Appears to be ordered by BusinessEntityID
-- File:Page:Slot goes up and down several times
-- Show physical locations with sys.fn_PhysLocFormatter (undocumented)
SELECT
P.BusinessEntityID,
[(File:Page:Slot)] =
sys.fn_PhysLocFormatter(%%physloc%%)
FROM Person.Person AS P;
-- Same query with TABLOCK or NOLOCK
-- Allocation-order (IAM) scan
-- Now appears to be ordered by File:Page:Slot instead of BusinessEntityID
SELECT P.BusinessEntityID,
[(File:Page:Slot)] =
sys.fn_PhysLocFormatter(%%physloc%%)
FROM Person.Person AS P WITH (NOLOCK);

Запросы заимствованы с небольшой модификацией от Пола Уайта .
Наконец, просто чтобы прояснить, этот ответ о появлении упорядоченного набора результатов. Там нет гарантированного заказа презентации без верхнего уровня ORDER BY.
Сканирование порядка размещения может происходить при множестве других обстоятельств, например, когда получена блокировка на уровне таблицы или база данных находится в режиме только для чтения. Параллелизм также может влиять на порядок, в котором возвращаются данные. Ключевым моментом является то ORDER BY, что без этого данные, в которых возвращаются данные, могут изменяться с течением времени в зависимости от конструкции.