SQLLIMITtutorialbeginner

¿Qué es LIMIT en SQL? Limitar el número de filas para principiantes

LIMIT limita el resultado de una consulta a N filas. Esencial para la paginación, las consultas top-N y las vistas previas. Cubrimos la sintaxis, OFFSET, las diferencias entre PostgreSQL y MySQL, los errores comunes y tres ejercicios prácticos.

6 min de lecturaSQL · LIMIT · tutorial · beginner

LIMIT es la cláusula de SQL que dice «dame como mucho N filas». Sencilla, e increíblemente útil.

Imagina una tabla con 50 000 vídeos. Cuando abres YouTube, no ves los 50 000 — la página de inicio te muestra 12-20 recomendaciones. Eso es LIMIT. Lo mismo vale para la paginación del comercio electrónico, las tablas de clasificación de los juegos, las páginas de un feed social, las vistas previas de un panel de administración.

Por qué importa LIMIT

Tres escenarios clásicos:

  1. Top-N: top 10 de ventas de la semana, top 3 de publicaciones por me gusta.
  2. Paginación: «página 2 de 100», 20 productos por página.
  3. Vista previa / comprobación rápida: mientras depuras, quieres echar un vistazo a las primeras 5 filas para ver qué pinta tienen los datos.

Sin LIMIT, la consulta devuelve todo. En tablas grandes eso significa:

  • Lento — millones de filas por la red.
  • Inútil — el usuario no va a ver tantas de todos modos.
  • Arriesgado — tu aplicación puede quedarse sin memoria.

Sintaxis básica

SELECT *
FROM table_name
LIMIT N;

Ejemplo: una tabla videos de un servicio de streaming.

SELECT title, views
FROM videos
LIMIT 5;

Devuelve las primeras 5 filas. Cuáles 5 — sin ORDER BY, impredecible. La base de datos las elige «tal como están».

LIMIT casi siempre va con ORDER BY

Si quieres «el top 5 por visualizaciones», LIMIT sin ordenar te da 5 filas al azar. Tienes que dejar claro el orden:

SELECT title, views
FROM videos
ORDER BY views DESC
LIMIT 5;

Ahora es «los 5 vídeos más vistos». La base de datos ordena primero y luego trunca.

Regla práctica: LIMIT sin ORDER BY solo tiene sentido en tres casos — vista previa durante el desarrollo, elegir una fila aleatoria (ORDER BY RANDOM()), depuración. En todo lo demás — escribe ORDER BY.

Ejemplo: servicio de streaming

idtitleauthorviewslikes
1Learn SQL in 30 minutesCode Academy25000012000
2Cats compile codeFunny Devs120000095000
3JOINs explained simplyDB Guru800004500
4A coder's borscht recipeTech Cooks300001800
510 mistakes in SELECTDB Guru1500008900
6Top React hooks 2024Web Dev50000025000
7A short history of LinuxOS Lessons900005500

Consulta: top 3 por visualizaciones.

SELECT title, views
FROM videos
ORDER BY views DESC
LIMIT 3;

Resultado:

titleviews
Cats compile code1200000
Top React hooks 2024500000
Learn SQL in 30 min250000

Entran siete filas, salen tres. Las que tienen el views más alto.

OFFSET — saltarse las primeras N filas

La cláusula compañera de LIMIT es OFFSET. Salta N filas antes de empezar a devolver.

SELECT title, views
FROM videos
ORDER BY views DESC
LIMIT 3 OFFSET 3;

Se lee como: «ordena por views descendente, salta 3 filas, devuelve las 3 siguientes».

Resultado para nuestra tabla (posiciones 4-6 por visualizaciones):

titleviews
Learn SQL in 30 min250000
10 mistakes in SELECT150000
A history of Linux90000

Eso es la paginación. Página 1 — LIMIT 3 OFFSET 0. Página 2 — LIMIT 3 OFFSET 3. Página 3 — LIMIT 3 OFFSET 6.

La fórmula de la paginación:

LIMIT page_size OFFSET (page_number - 1) * page_size

PostgreSQL frente a MySQL — casi idénticos

Ambos entienden LIMIT N y LIMIT N OFFSET M. Diferencias rápidas:

  • MySQL también admite una forma abreviada LIMIT M, N — salta M, devuelve N. Se considera heredada; usa LIMIT N OFFSET M en su lugar.
  • PostgreSQL también habla la forma estándar de SQL: FETCH FIRST 10 ROWS ONLY (en lugar de LIMIT 10) y OFFSET 5 ROWS FETCH NEXT 10 ROWS ONLY. Verbosa, pero forma parte de SQL:2008. En la práctica todo el mundo escribe simplemente LIMIT/OFFSET.

Para principiantes: recuerda LIMIT N OFFSET M — funciona en ambos.

Ejemplo más grande: paginación de comercio electrónico

Tabla products:

idnamecategorypricepopularity
1iPhone 15Electronics999980
2Bosch kettleAppliances49320
3Book "Clean Code"Books22850
4DeLonghi coffee makerAppliances380410
5MacBook AirElectronics1450920
6Book "SQL in a Month"Books17670
7Pixel 8Electronics830740
8LG fridgeAppliances720280
9Slow cookerAppliances89560
10Book "JavaScript"Books20510

Objetivo: mostrar la página 2 (4 productos por página), ordenados por popularidad.

SELECT id, name, popularity
FROM products
ORDER BY popularity DESC
LIMIT 4 OFFSET 4;

Resultado:

idnamepopularity
7Pixel 8740
6Book "SQL in a Month"670
9Slow cooker560
10Book "JavaScript"510

Página 1 (los más populares): iPhone 15, MacBook Air, Book "Clean Code", Pixel 8. Página 2: las filas 5-8 por popularidad. La página 3 sería OFFSET 8.

Muestreo aleatorio

Combinación para una fila aleatoria (útil para retos diarios, función del día, etc.):

-- PostgreSQL
SELECT * FROM products ORDER BY RANDOM() LIMIT 1;

-- MySQL
SELECT * FROM products ORDER BY RAND() LIMIT 1;

Aviso: en tablas grandes RANDOM() / RAND() es pesado — la base de datos tiene que generar un número aleatorio por fila y ordenar. Está bien para tablas pequeñas, doloroso para millones de filas. Para esas, usa otros trucos (p. ej., WHERE id = ROUND(RANDOM() * (SELECT MAX(id) FROM products))).

Errores habituales de principiante

1. LIMIT sin ORDER BY, esperando un orden. La gente da por hecho que «la base de datos devuelve en orden de inserción». No lo hace. ¿Necesitas un orden? Escribe ORDER BY.

2. Paginación sin ORDER BY. El error más traicionero. Sin ordenar, la página 2 puede contener filas de la página 1, y el usuario ve duplicados. Ordena siempre por una columna única (normalmente id).

3. OFFSET enormes. OFFSET 1000000 obliga a la base de datos a generar un millón de filas y luego tirarlas. Lento. Para tablas grandes prefiere la paginación por clave (keyset): WHERE id > last_seen_id LIMIT N.

4. LIMIT con UNION. Si quieres que LIMIT se aplique a todo el UNION, ponlo entre paréntesis o coloca ORDER BY/LIMIT al final del todo:

(SELECT name FROM authors UNION SELECT name FROM editors)
ORDER BY name
LIMIT 10;

5. LIMIT negativo o LIMIT 0. LIMIT 0 es válido — devuelve 0 filas (a veces útil para comprobar una consulta sin traer datos). Los números negativos lanzan un error.

6. LIMIT en UPDATE/DELETE — depende de la base de datos. MySQL permite UPDATE … LIMIT 100. PostgreSQL no — tienes que usar una subconsulta o un CTE.

Resumen rápido

  • LIMIT N — devuelve como mucho N filas.
  • OFFSET M — salta M filas antes de empezar.
  • Casi siempre acompañado de ORDER BY — de lo contrario el orden es impredecible.
  • Se usa para top-N, paginación, vistas previas.
  • La misma sintaxis en PostgreSQL y MySQL.
  • Los OFFSET enormes son lentos — prefiere la paginación por clave en tablas grandes.

Pruébalo tú

Sobre la tabla videos:

  1. Obtén los 5 vídeos con más me gusta.
  2. Obtén la página 2 (3 vídeos por página), ordenados por visualizaciones descendentes.
  3. Elige un vídeo aleatorio para «el vídeo del día».

Escribe las consultas por tu cuenta. Una vez que te manejes con la combinación ORDER BY + LIMIT, la mitad de todas las consultas de lectura del mundo real se reducen a este patrón.

Practica con ejercicios reales

Resuelve ejercicios en el entrenador de SQL con corrección instantánea y pistas.

Abrir el entrenador