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.
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 SOFFSET (N - 1) * S
| Página | 10 filas por página |
|---|---|
| 1 | LIMIT 10 OFFSET 0 (filas 1–10) |
| 2 | LIMIT 10 OFFSET 10 (filas 11–20) |
| 3 | LIMIT 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 datos | Primeras 5 filas |
|---|---|
| MySQL, MariaDB, PostgreSQL, SQLite | LIMIT 5 |
| SQL Server | SELECT TOP 5 ... o OFFSET 0 ROWS FETCH NEXT 5 ROWS ONLY |
| Oracle 12c+, PostgreSQL, estándar SQL | FETCH FIRST 5 ROWS ONLY |
Conclusiones clave:
LIMIT ndevuelve como máximonfilas.OFFSET nomitenfilas antes de devolver el resultado.- Usa siempre
LIMITconORDER BYy haz que el orden sea único para que el resultado sea estable. - Página
NdeSfilas:LIMIT S OFFSET (N - 1) * S. - SQL Server usa
TOP, y el estándar SQL usaFETCH 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.