Я думаю, что значения p.DtDistribuicao
имеют некоторые связи.Сервер может выбрать любое из связанных значений, так как «первый» и два разных запроса могут дать два разных результата в этом случае.
Вы можете добавить уникальное поле в конце ORDER BYкак разорватьНапример, эти два запроса должны возвращать одинаковые строки (при условии, что у вас есть уникальное поле с именем Id):
SELECT *
FROM
(
SELECT *,
ROW_NUMBER() OVER (ORDER BY p.DtDistribuicao, p.Id) AS RowNumber
FROM ProcessoInstanciaFonte as p
) AS q
WHERE q.RowNumber BETWEEN 1 AND 20;
ORDER BY q.RowNumber
SELECT TOP 20 *
FROM dbo.ProcessoInstanciaFonte AS p
ORDER BY p.DtDistribuicao, p.Id