Problema:
Le gustaría limitar las filas en un conjunto de resultados de SQL Server.
Ejemplo:
Nuestra base de datos tiene una tabla llamada toy
con datos en las columnas id
, name
y price
.
id | nombre | precio |
---|---|---|
161 | Bicicleta BMX | 200,00 |
121 | El robot Tobie | 185,50 |
213 | Juego de pesca | 25,00 |
102 | Rompecabezas de animales | 45,80 |
111 | Conjunto de pista de carreras | 126,70 |
233 | Ladrillos fáciles | 21.00 |
Seleccionemos los nombres y precios de los juguetes. Pero solo necesitamos ver las primeras cinco filas.
Solución 1:
SELECT name, price FROM toy ORDER BY price OFFSET 0 ROWS FETCH FIRST 5 ROWS ONLY;
Este es el resultado de la consulta:
nombre | precio |
---|---|
Ladrillos fáciles | 21.00 |
Juego de pesca | 25,00 |
Rompecabezas de animales | 45,80 |
Conjunto de pista de carreras | 126,70 |
El robot Tobie | 185,50 |
Discusión:
Para limitar filas en el conjunto de resultados, use ORDER BY con las cláusulas opcionales OFFSET y FETCH. Primero, la consulta ordena las filas (ORDENAR POR). Luego le dice a SQL Server cuál debe ser la primera fila en el conjunto de resultados (OFFSET...ROWS) y cuántas filas devolver (FETCH...ONLY).
La cláusula OFFSET se coloca inmediatamente después de ORDER BY. El entero indica la primera fila a contar (en SQL Server, la primera fila es 0, la segunda fila es 1, etc.), seguida de la palabra clave ROW o ROWS. Puede usar ROW o ROWS, pero se recomienda usar ROW para 1 fila y ROWS para 0 y varias filas. Mira la imagen:

En nuestro ejemplo, ordenamos por precio (ORDER BY price
) y comience a devolver resultados desde la primera fila (OFFSET 0 ROWS
). Luego usamos FETCH con la palabra clave FIRST. Puede usar PRIMERO o SIGUIENTE; se recomienda usar PRIMERO si comienza desde la primera fila sin omitir ningún registro y SIGUIENTE si se omite alguna fila (es decir, si el DESPLAZAMIENTO es mayor que 0).
Finalmente, tenemos el número de filas a seleccionar y la palabra clave SOLAMENTE FILAS. Use SOLAMENTE FILAS si está devolviendo varias filas y SOLAMENTE FILA si está limitando el resultado a una fila. En nuestro ejemplo, lo limitamos a cinco filas (FETCH FIRST 5 ROWS ONLY
).
A continuación, tenemos otra consulta que limita las filas a cinco pero comienza desde la quinta fila de la tabla (OFFSET 4 ROWS
):
Solución 2:
SELECT name, price FROM toy ORDER BY price OFFSET 4 ROWS FETCH NEXT 5 ROWS ONLY;
Este es el resultado de la consulta:
nombre | precio |
---|---|
El robot Tobie | 185,50 |
Bicicleta BMX | 200,00 |
Tenga en cuenta que esta consulta devuelve solo dos filas, no las cinco indicadas. Mira la imagen:

¿Por qué sólo dos filas? Porque esta tabla solo contiene seis registros. Si omitimos las primeras cuatro filas y comenzamos en la fila 5, solo quedan dos filas.
SQL Server tiene otra forma de limitar las filas:la cláusula TOP.
Solución 3:
SELECT TOP 3 name, price FROM toy ORDER BY price;
Este es el resultado de la consulta:
nombre | precio |
---|---|
Ladrillos fáciles | 21.00 |
Juego de pesca | 25,00 |
Rompecabezas de animales | 45,80 |
Si no necesita omitir ninguna fila, puede usar la cláusula TOP de SQL Server para limitar las filas devueltas. Se coloca inmediatamente después de SELECT. La palabra clave TOP va seguida de un número entero que indica el número de filas a devolver. En nuestro ejemplo, ordenamos por precio y luego limitó las filas devueltas a 3.
A diferencia del método OFFSET – FETCH, TOP no requiere ORDER BY. Aquí hay un ejemplo similar, pero sin ordenar los registros:
Solución 4:
SELECT TOP 3 name, price FROM toy;
Este es el resultado de la consulta:
Observe que se han devuelto diferentes registros. Por lo general (pero no siempre), las filas se mostrarán en el orden en que se insertaron los registros en la tabla.
Recomendamos usar OFFSET y FETCH en lugar de TOP, ya que OFFSET y FETCH son estándar de SQL; TOP es específico de T-SQL.