LIMIT
La cláusula LIMIT restringe el número de filas que devuelve una consulta. Es imprescindible cuando trabajas con tablas grandes y solo necesitas ver una muestra, cuando implementas paginación en una aplicación, o cuando quieres obtener los N primeros o últimos registros según algún criterio.
Sintaxis
SELECT columnas
FROM tabla
LIMIT cantidad;O con desplazamiento:
SELECT columnas
FROM tabla
LIMIT desplazamiento, cantidad;La forma con dos argumentos salta las primeras desplazamiento filas y después devuelve cantidad filas. Esto es la base de la paginación.
Obtener los primeros N registros
Para ver solo los 5 primeros productos:
SELECT nombre, precio
FROM productos
LIMIT 5;| nombre | precio |
|---|---|
| iPhone 15 Pro | 1299.99 |
| Samsung Galaxy S24 | 899.99 |
| Google Pixel 8 | 699.00 |
| Xiaomi 14 | 599.99 |
| MacBook Air M3 | 1399.00 |
Sin ORDER BY, el orden de las filas no está garantizado. MySQL devuelve las primeras 5 filas que encuentra, que normalmente coinciden con las primeras insertadas, pero no debes depender de este comportamiento.
LIMIT con ORDER BY
La combinación de ORDER BY y LIMIT es una de las más habituales en SQL. Te permite responder preguntas como "¿cuáles son los 3 productos más caros?" o "¿cuál es el pedido más reciente?":
SELECT nombre, precio
FROM productos
ORDER BY precio DESC
LIMIT 3;| nombre | precio |
|---|---|
| ASUS ROG Zephyrus | 1899.99 |
| Lenovo ThinkPad X1 | 1549.00 |
| MacBook Air M3 | 1399.00 |
MySQL ordena todos los productos por precio descendente y después toma solo los primeros 3. El orden de las operaciones es importante: primero se aplica ORDER BY y después LIMIT.
Para obtener los 5 empleados con menor salario:
SELECT nombre, apellidos, puesto, salario
FROM empleados
ORDER BY salario ASC
LIMIT 5;| nombre | apellidos | puesto | salario |
|---|---|---|---|
| Inés | Pascual Moreno | Operaria de Almacén | 26000.00 |
| Marcos | Delgado Romero | Operario de Almacén | 26000.00 |
| Raúl | Peña Torres | Vendedor Junior | 28000.00 |
| Daniel | Vargas Martín | Vendedor | 32000.00 |
| Patricia | Cano Sánchez | Vendedora | 32000.00 |
Obtener un único registro
LIMIT 1 es muy útil cuando sabes que solo necesitas un resultado, como el pedido más reciente:
SELECT id, fecha_pedido, estado, total
FROM pedidos
ORDER BY fecha_pedido DESC
LIMIT 1;| id | fecha_pedido | estado | total |
|---|---|---|---|
| 25 | 2026-01-08 14:20:00 | cancelado | 149.99 |
O el producto más barato que esté en stock:
SELECT nombre, precio, stock
FROM productos
WHERE stock > 0
ORDER BY precio ASC
LIMIT 1;| nombre | precio | stock |
|---|---|---|
| 1984 | 12.99 | 110 |
Paginación con OFFSET
Cuando necesitas implementar paginación (como la típica "Página 1, 2, 3..." de una tienda online), usas LIMIT con un desplazamiento. La sintaxis es LIMIT desplazamiento, cantidad, donde el desplazamiento indica cuántas filas saltar.
Página 1 (productos del 1 al 10):
SELECT nombre, precio
FROM productos
ORDER BY nombre
LIMIT 0, 10;Página 2 (productos del 11 al 20):
SELECT nombre, precio
FROM productos
ORDER BY nombre
LIMIT 10, 10;Página 3 (productos del 21 al 30):
SELECT nombre, precio
FROM productos
ORDER BY nombre
LIMIT 20, 10;La fórmula general para calcular el desplazamiento es: desplazamiento = (numero_pagina - 1) * registros_por_pagina. Para la página 3 con 10 registros por página: (3 - 1) * 10 = 20.
Sintaxis alternativa con OFFSET
MySQL también acepta una sintaxis más legible con la palabra clave OFFSET:
SELECT nombre, precio
FROM productos
ORDER BY nombre
LIMIT 10 OFFSET 20;Esta consulta es equivalente a LIMIT 20, 10. La diferencia es solo de legibilidad: con OFFSET queda más claro qué número es la cantidad y cuál el desplazamiento. El orden de los argumentos se invierte: en LIMIT a, b primero va el desplazamiento y después la cantidad, mientras que en LIMIT b OFFSET a primero va la cantidad y después el desplazamiento.
Rendimiento de LIMIT con OFFSET grande
Es importante saber que LIMIT con un desplazamiento grande no es tan eficiente como podría parecer. Cuando ejecutas LIMIT 10000, 10, MySQL no salta directamente a la fila 10000. En realidad lee y descarta las primeras 10000 filas antes de devolver las 10 siguientes. Cuanto mayor es el desplazamiento, más trabajo realiza el servidor.
En tablas pequeñas esto no supone ningún problema. Pero en tablas con millones de registros, la paginación con offsets grandes puede volverse lenta. Existen técnicas alternativas como la paginación basada en cursor (usar el último id visto como punto de partida en lugar de un offset numérico), pero eso es un tema más avanzado.
LIMIT con WHERE y ORDER BY
Las tres cláusulas se combinan con frecuencia. El orden en la consulta siempre es WHERE primero, ORDER BY después y LIMIT al final:
SELECT nombre, precio, stock
FROM productos
WHERE categoria_id = 6
ORDER BY precio DESC
LIMIT 2;| nombre | precio | stock |
|---|---|---|
| iPhone 15 Pro | 1299.99 | 45 |
| Samsung Galaxy S24 | 899.99 | 62 |
MySQL procesa la consulta en este orden:
- FROM: tabla
productos. - WHERE: filtra solo los de categoría 6 (4 smartphones).
- ORDER BY: ordena los 4 por precio descendente.
- LIMIT: toma los 2 primeros del resultado ordenado.
Los 5 pedidos más grandes que no estén cancelados:
SELECT id, fecha_pedido, estado, total
FROM pedidos
WHERE estado != 'cancelado'
ORDER BY total DESC
LIMIT 5;| id | fecha_pedido | estado | total |
|---|---|---|---|
| 5 | 2025-11-02 10:20:00 | entregado | 1899.99 |
| 15 | 2025-12-08 09:30:00 | pendiente | 1549.00 |
| 8 | 2025-11-15 17:20:00 | enviado | 1399.00 |
| 1 | 2025-10-05 09:30:00 | entregado | 1349.98 |
| 2 | 2025-10-08 14:15:00 | entregado | 899.99 |
Practica con LIMIT
Usa el editor para probar distintas combinaciones de LIMIT y OFFSET. Intenta paginar resultados o encontrar los N productos más caros:
En el siguiente artículo veremos cómo eliminar filas duplicadas del resultado con DISTINCT.
Escrito por Eduardo Lázaro
