🎯 Quedan pocos días este mes Apoya SQLTest.online y ayúdanos a mantener la práctica de SQL gratuita para todos. Dona hoy →
Código SQL copiado al portapapeles

SQL LIMIT y OFFSET: primeras N filas y paginación

Lección 2.7 · Tiempo de lectura: ~5 min · Tareas de práctica ↓

La cláusula SQL LIMIT restringe cuántas filas devuelve una consulta, y OFFSET omite una cantidad de filas antes de devolver el resto. En esta lección aprenderás a obtener las primeras N filas, a armar una paginación, por qué LIMIT necesita ORDER BY y cómo escriben lo mismo otras bases de datos.

Las tablas suelen tener miles o millones de filas, y rara vez se necesitan todas a la vez. Un informe necesita los 10 primeros elementos, una aplicación muestra 20 resultados por página. LIMIT y OFFSET devuelven exactamente la parte del resultado que necesitas.

SQL LIMIT y OFFSET: en un resultado ordenado, OFFSET omite filas y LIMIT toma las siguientes, para listas top-N y paginación

La cláusula LIMIT

LIMIT define la cantidad máxima de filas del resultado. Se escribe al final de la consulta, después de ORDER BY.

Sintaxis básica

SELECT column1, column2, ...
FROM table_name
ORDER BY column_name
LIMIT row_count;
SELECT title, length
FROM film
ORDER BY length DESC
LIMIT 5;

Resultado: las 5 películas más largas.


Por qué LIMIT necesita ORDER BY

Sin ORDER BY, la base de datos devuelve las filas en el orden que le resulte conveniente, así que "las primeras 5 filas" pueden ser distintas cada vez. Ordena siempre antes de limitar.

Además, el orden tiene que ser único. En la consulta anterior, varias películas duran lo mismo, 185 minutos, y es la base de datos la que decide cuáles entran en el top 5. Agrega una columna que desempate:

SELECT title, length
FROM film
ORDER BY length DESC, title
LIMIT 5;

Resultado: las 5 películas más largas; las de igual duración se ordenan por título, así que el resultado es el mismo en cada ejecución.


La cláusula OFFSET

OFFSET omite una cantidad de filas antes de que LIMIT empiece a contar:

SELECT actor_id, first_name, last_name
FROM actor
ORDER BY actor_id
LIMIT 5 OFFSET 10;

Resultado: los actores 11 a 15 según actor_id: se omiten las primeras 10 filas y se devuelven las 5 siguientes.

MySQL y MariaDB también aceptan la forma corta LIMIT 10, 5, donde el primer número es el desplazamiento y el segundo la cantidad de filas. La forma explícita LIMIT 5 OFFSET 10 se lee mejor y también funciona en PostgreSQL y SQLite.


Paginación con LIMIT y OFFSET

La paginación divide un resultado largo en páginas. Para la página N con S filas por página:

  • LIMIT S
  • OFFSET (N - 1) * S
Página10 filas por página
1LIMIT 10 OFFSET 0 (filas 1–10)
2LIMIT 10 OFFSET 10 (filas 11–20)
3LIMIT 10 OFFSET 20 (filas 21–30)
SELECT film_id, title
FROM film
ORDER BY title, film_id
LIMIT 10 OFFSET 20;

Resultado: la página 3 de la lista de películas ordenada por título.

La base de datos igual lee y omite todas las filas del desplazamiento, por eso los desplazamientos muy grandes (página 10 000) se vuelven lentos. Para una paginación profunda, las aplicaciones suelen guardar el último valor de la página anterior y filtrar con WHERE.


LIMIT en otras bases de datos

LIMIT lo admiten MySQL, MariaDB, PostgreSQL y SQLite. Otras bases de datos usan otra sintaxis:

Base de datosPrimeras 5 filas
MySQL, MariaDB, PostgreSQL, SQLiteLIMIT 5
SQL ServerSELECT TOP 5 ... o OFFSET 0 ROWS FETCH NEXT 5 ROWS ONLY
Oracle 12c+, PostgreSQL, estándar SQLFETCH FIRST 5 ROWS ONLY

Conclusiones clave:

  • LIMIT n devuelve como máximo n filas.
  • OFFSET n omite n filas antes de devolver el resultado.
  • Usa siempre LIMIT con ORDER BY y haz que el orden sea único para que el resultado sea estable.
  • Página N de S filas: LIMIT S OFFSET (N - 1) * S.
  • SQL Server usa TOP, y el estándar SQL usa FETCH FIRST n ROWS ONLY.

Preguntas frecuentes

¿Cuál es la diferencia entre LIMIT y OFFSET?

LIMIT define cuántas filas devolver; OFFSET define cuántas filas omitir antes. LIMIT 5 OFFSET 10 omite 10 filas y devuelve las 5 siguientes.

¿Cuál es el equivalente de LIMIT en SQL Server?

SELECT TOP 5 ... para las primeras filas, u ORDER BY ... OFFSET 10 ROWS FETCH NEXT 5 ROWS ONLY para paginar.

¿Por qué una consulta con LIMIT devuelve filas distintas cada vez?

Porque la consulta no tiene ORDER BY, o las columnas de ordenamiento tienen valores iguales. Ordena por columnas que identifiquen cada fila de forma única, por ejemplo agrega la clave primaria como última clave de ordenamiento.

Intenta resolver las siguientes tareas para reforzar lo que aprendiste en esta lección.

  1. Las 10 Mejores Películas por Título
  2. Las 5 Películas Más Largas
  3. Lista de Películas - Tercera Página
  4. La Película Más Larga
  5. Diez productos más pesados