ORDER BY y LIMIT en SQL: ordenar y paginar resultados

Actualizado el 29 de septiembre de 2026

Una tabla no tiene un orden garantizado: si no lo pides, la base de datos devuelve las filas en el orden que le resulte más cómodo, y ese orden puede cambiar. ORDER BY define el orden del resultado, y LIMIT se queda con las primeras filas: juntos sirven para responder preguntas como "los 3 productos más caros" o para mostrar resultados por páginas.

Todos los ejemplos usan esta tabla de productos de una tienda. Fíjate en que el escritorio no tiene stock registrado (NULL), que no es lo mismo que tener 0.

Estructura
CREATE TABLE productos (
  id        INTEGER PRIMARY KEY,
  nombre    TEXT,
  categoria TEXT,
  precio    INTEGER,
  stock     INTEGER
);
productos
idnombrecategoriapreciostock
1TecladoComputación2599012
2MouseComputación1299030
3MonitorComputación1599904
4AudífonosAudio349900
5ParlanteAudio499907
6SillaMuebles899903
7EscritorioMuebles129990NULL

ORDER BY: ascendente y descendente

SELECT nombre, precio
FROM productos
ORDER BY precio;
nombreprecio
Mouse12990
Teclado25990
Audífonos34990
Parlante49990
Silla89990
Escritorio129990
Monitor159990

Por defecto el orden es ascendente (ASC): de menor a mayor, o alfabético para textos. ORDER BY precio DESC ordena de mayor a menor. Se puede ordenar por una columna que no está en el SELECT, por un cálculo o por un alias.

Ordenar por varias columnas

SELECT categoria, nombre, precio
FROM productos
ORDER BY categoria, precio DESC;
categorianombreprecio
AudioParlante49990
AudioAudífonos34990
ComputaciónMonitor159990
ComputaciónTeclado25990
ComputaciónMouse12990
MueblesEscritorio129990
MueblesSilla89990

Primero se ordena por categoría; la segunda columna solo decide el orden entre filas con la misma categoría. DESC se aplica solo a la columna que lo acompaña: la categoría sigue siendo ascendente.

LIMIT: quedarse con las primeras filas

SELECT nombre, precio
FROM productos
ORDER BY precio DESC
LIMIT 3;
nombreprecio
Monitor159990
Escritorio129990
Silla89990

LIMIT corta el resultado después de ordenarlo, así que "los 3 más caros" es ordenar de mayor a menor y quedarse con 3. LIMIT funciona en SQLite, PostgreSQL y MySQL; en SQL Server se escribe SELECT TOP 3 ....

Paginar con OFFSET

OFFSET salta una cantidad de filas antes de empezar a devolver. Con 3 resultados por página, la página 1 usa OFFSET 0, la 2 OFFSET 3, la 3 OFFSET 6: en general, (página - 1) × tamaño.

SELECT nombre
FROM productos
ORDER BY nombre
LIMIT 3 OFFSET 3;   -- página 2
nombre
Mouse
Parlante
Silla

Dónde quedan los NULL

Al ordenar por stock, el escritorio (NULL) queda primero en SQLite, que considera NULL menor que cualquier valor. PostgreSQL hace lo contrario y los deja al final. Para controlarlo, SQLite (desde la versión 3.30) y PostgreSQL aceptan ORDER BY stock NULLS LAST. Una alternativa que funciona en casi cualquier base es ordenar primero por si el valor es nulo: ORDER BY stock IS NULL, stock.

Errores comunes

LIMIT sin ORDER BY

SELECT nombre FROM productos LIMIT 3 devuelve 3 filas cualquiera. Puede que hoy parezcan "las primeras", pero nada lo garantiza. Siempre que uses LIMIT para obtener "los primeros" o "los últimos" de algo, acompáñalo de ORDER BY.

Las cláusulas en otro orden

SELECT nombre FROM productos ORDER BY precio WHERE precio > 1000;
-- Error: near "WHERE": syntax error

El orden de las cláusulas es fijo: SELECT, FROM, WHERE, GROUP BY, HAVING, ORDER BY y LIMIT. Ordenar y limitar siempre va al final.

Números guardados como texto

Si una columna guarda números como texto, se ordenan alfabéticamente: '10', '100', '9'. La solución de fondo es usar el tipo correcto en la tabla; mientras tanto, ORDER BY CAST(columna AS INTEGER) ordena como números.

Ejercicios resueltos

Intenta resolver cada ejercicio antes de abrir la solución: equivocarse y corregir es la parte que más enseña.

1.Los 3 productos más caros

Escribe una consulta que muestre el nombre y el precio de los 3 productos más caros.

Ver solución
Solución
SELECT nombre, precio
FROM productos
ORDER BY precio DESC
LIMIT 3;
nombreprecio
Monitor159990
Escritorio129990
Silla89990

"Los más caros" se traduce en ordenar de mayor a menor (DESC) y quedarse con los primeros. Sin DESC se obtendrían los 3 más baratos.

2.Catálogo por categoría

Escribe una consulta que muestre categoría, nombre y precio de todos los productos, ordenados por categoría alfabéticamente y, dentro de cada categoría, del más caro al más barato.

Ver solución
Solución
SELECT categoria, nombre, precio
FROM productos
ORDER BY categoria ASC, precio DESC;

El resultado es la tabla de la sección "Ordenar por varias columnas". El ASC es opcional porque es el valor por defecto, pero escribirlo junto al DESC deja claro que cada columna tiene su propia dirección.

3.Segunda página del catálogo

Un catálogo muestra los productos ordenados por nombre, 3 por página. Escribe la consulta que devuelve los nombres de la página 2.

Ver solución
Solución
SELECT nombre
FROM productos
ORDER BY nombre
LIMIT 3 OFFSET 3;
nombre
Mouse
Parlante
Silla

La página 1 son Audífonos, Escritorio y Monitor. Para la página 2 hay que saltar esas 3 filas (OFFSET 3) y tomar las 3 siguientes. El ORDER BY es indispensable: sin él, las páginas podrían repetir o saltarse productos entre una consulta y otra.

Practica SQL con ejercicios a tu nivel

En Coditer resuelves ejercicios en el navegador, con tests automáticos que revisan tu código y una IA que te da pistas cuando te atascas. Practicar es gratis.