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 lecturaReferenceSQL · 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

id title author views likes
1 Learn SQL in 30 minutes Code Academy 250000 12000
2 Cats compile code Funny Devs 1200000 95000
3 JOINs explained simply DB Guru 80000 4500
4 A coder's borscht recipe Tech Cooks 30000 1800
5 10 mistakes in SELECT DB Guru 150000 8900
6 Top React hooks 2024 Web Dev 500000 25000
7 A short history of Linux OS Lessons 90000 5500

Consulta: top 3 por visualizaciones.

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

Resultado:

title views
Cats compile code 1200000
Top React hooks 2024 500000
Learn SQL in 30 min 250000

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):

title views
Learn SQL in 30 min 250000
10 mistakes in SELECT 150000
A history of Linux 90000

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:

id name category price popularity
1 iPhone 15 Electronics 999 980
2 Bosch kettle Appliances 49 320
3 Book "Clean Code" Books 22 850
4 DeLonghi coffee maker Appliances 380 410
5 MacBook Air Electronics 1450 920
6 Book "SQL in a Month" Books 17 670
7 Pixel 8 Electronics 830 740
8 LG fridge Appliances 720 280
9 Slow cooker Appliances 89 560
10 Book "JavaScript" Books 20 510

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:

id name popularity
7 Pixel 8 740
6 Book "SQL in a Month" 670
9 Slow cooker 560
10 Book "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