Contenido de esta guía
Qué hace OFFSET
OFFSET descarta las primeras filas de un resultado y empieza a devolver datos después de esa posición. Suele combinarse con LIMIT o FETCH para dividir una consulta en páginas.
El desplazamiento se aplica al resultado ordenado. Sin un ORDER BY suficientemente estable, dos ejecuciones pueden entregar filas distintas en la misma página.
Sintaxis habitual
SELECT columnas
FROM tabla
ORDER BY columna, clave_unica
LIMIT 3 OFFSET 3;SELECT columnas
FROM tabla
ORDER BY columna, clave_unica
OFFSET 3 ROWS
FETCH NEXT 3 ROWS ONLY;Ejemplo guiado
SELECT id, nombre, precio
FROM productos
ORDER BY precio, id
LIMIT 3 OFFSET 3;| id | nombre | precio |
|---|---|---|
| 10 | Altavoz | 54.0 |
| 5 | Auriculares | 69.9 |
| 8 | Disco SSD | 89.0 |
El motor ordena por precio y usa id para deshacer empates. Después omite tres filas y devuelve las tres siguientes.
Fórmula de paginación: para páginas numeradas desde 1, el desplazamiento suele ser (pagina - 1) × tamaño.
Errores frecuentes
Paginar sin un orden único
ORDER BY precio no determina el orden entre productos con el mismo precio. Añade una clave estable, como ORDER BY precio, id.
Los desplazamientos grandes también pueden ser costosos porque el motor debe localizar y descartar muchas filas. Para recorridos extensos, una paginación por cursor —por ejemplo, continuar después del último id visto— puede escalar mejor.
Comprueba lo aprendido
Devuelve los últimos tres productos del ejemplo
Mantén páginas de tres filas y el mismo orden. Escribe la consulta de la tercera página.
OFFSET 6.Solución razonada
SELECT id, nombre, precio
FROM productos
ORDER BY precio, id
LIMIT 3 OFFSET 6;El resultado contiene Monitor 24, Monitor 27 y Portátil Pro. La clave id mantiene un orden determinista cuando dos precios coinciden.
Compatibilidad entre motores
PostgreSQL, MySQL y SQLite permiten la forma LIMIT … OFFSET …. SQL Server integra OFFSET y FETCH dentro de ORDER BY. La sintaxis exacta cambia, pero la recomendación de fijar un orden predecible se mantiene.
Qué debes recordar
OFFSETomite filas antes de devolver el bloque.- La paginación necesita un
ORDER BYestable y, preferiblemente, único. - La sintaxis de límite cambia en SQL Server.
- Desplazamientos grandes pueden justificar paginación por cursor.