Для меня использование OFFSET и FETCH вместе было медленным, поэтому я использовал комбинацию TOP и OFFSET, как это (что было быстрее):
SELECT TOP 20 * FROM (SELECT columname1, columname2 FROM tablename
WHERE <conditions...> ORDER BY columname1 OFFSET 100 ROWS) aliasname
Примечание: Если вы используете TOP и OFFSET вместе в одном запросе, например:
SELECT TOP 20 columname1, columname2 FROM tablename
WHERE <conditions...> ORDER BY columname1 OFFSET 100 ROWS
Тогда вы получите ошибку, поэтому для совместного использования TOP и OFFSET вам нужно разделить ее подзапросом.
И если вам нужно использовать SELECT DISTINCT, запрос выглядит так:
SELECT TOP 20 FROM (SELECT DISTINCT columname1, columname2
WHERE <conditions...> ORDER BY columname1 OFFSET 100 ROWS) aliasname
Примечание: Использование SELECT ROW_NUMBER с DISTINCT у меня не сработало.