Summary: in this tutorial, you will learn how to use the SQL Server OFFSET FETCH clauses to limit the number of rows returned by a query.
Introduction to SQL Server OFFSET FETCH
The OFFSET and FETCH clauses are options of the ORDER BY clause. They allow you to limit the number of rows returned by a query.
Here’s the syntax for using the OFFSET and FETCH clauses:
ORDER BY column_list [ASC |DESC]
OFFSET offset_row_count {ROW | ROWS}
FETCH {FIRST | NEXT} fetch_row_count {ROW | ROWS} ONLYCode language: SQL (Structured Query Language) (sql)In this syntax:
- The
OFFSETclause specifies the number of rows to skip before starting to return rows from the query. Theoffset_row_countcan be a constant, variable, or parameter that is greater or equal to zero. - The
FETCHclause specifies the number of rows to return after theOFFSETclause has been processed. Theoffset_row_countcan be a constant, variable, or scalar that is greater or equal to one. - The
OFFSETclause is mandatory, while theFETCHclause is optional. Additionally,FIRSTandNEXTare synonyms and can be used interchangeably. Similarly, you can useROWandROWSinterchangeably.
The following picture illustrates the OFFSET and FETCH clauses:

It’s important to note that you must use the OFFSET and FETCH clauses with the ORDER BY clause. Otherwise, you encounter an error.
The OFFSET and FETCH clauses are preferable for implementing the query paging solutions compared to the TOP clause.
The OFFSET and FETCH clauses have been available since SQL Server 2012 (11.x) and later, as well as Azure SQL Database.
SQL Server OFFSET and FETCH clause examples
We will use the products table from the sample database for the demonstration.
1) Using the SQL Server OFFSET FETCH example
The following query uses a SELECT statement to retrieve all rows from the products table and sorts them by the list prices and names:
SELECT
product_name,
list_price
FROM
production.products
ORDER BY
list_price,
product_name;Code language: SQL (Structured Query Language) (sql)Output:

To skip the first 10 products and return the rest, you use the OFFSET clause as shown in the following statement:
SELECT
product_name,
list_price
FROM
production.products
ORDER BY
list_price,
product_name
OFFSET 10 ROWS;Code language: SQL (Structured Query Language) (sql)Output:

To skip the first 10 products and select the next 10 products, you use both OFFSET and FETCH clauses as follows:
SELECT
product_name,
list_price
FROM
production.products
ORDER BY
list_price,
product_name
OFFSET 10 ROWS
FETCH NEXT 10 ROWS ONLY;
Code language: SQL (Structured Query Language) (sql)Output:
2) Using the OFFSET FETCH clause to get the top N rows
The following example uses the OFFSET FETCH clause to retrieve the top 10 most expensive products from the products table:
SELECT
product_name,
list_price
FROM
production.products
ORDER BY
list_price DESC,
product_name
OFFSET 0 ROWS
FETCH FIRST 10 ROWS ONLY;Code language: SQL (Structured Query Language) (sql)Output:
In this example:
- First, the
ORDER BYclause sorts the products by their list prices in descending order. - Then, the
OFFSETclause skips zero rows, and theFETCHclause retrieves the first 10 products from the list.
Summary
- Use the SQL Server
OFFSETFETCHclauses to limit the number of rows returned by a query.