Contenido de esta guía
Por qué necesitas ORDER BY
Sin ORDER BY, SQL no garantiza el orden de las filas. Que una consulta parezca devolver siempre los datos por id no convierte ese comportamiento en un contrato.
ORDER BY se aplica al resultado final. Puede ordenar por columnas, alias o expresiones y admite varios criterios de izquierda a derecha.
Sintaxis
SELECT columnas
FROM tabla
ORDER BY criterio_1 [ASC | DESC],
criterio_2 [ASC | DESC];ASC ordena de menor a mayor y suele ser el valor predeterminado. DESC invierte el sentido. El segundo criterio solo resuelve empates del primero.
Ejemplo guiado: ordenar por stock
SELECT nombre,
stock
FROM productos
ORDER BY stock ASC, nombre ASC
LIMIT 5;| nombre | stock |
|---|---|
| Altavoz | 0 |
| Portátil Pro | 0 |
| Monitor 27 | 2 |
| Monitor 24 | 4 |
| Teclado | 7 |
Altavoz y Portátil Pro empatan con stock cero. nombre ASC decide un orden reproducible dentro de ese empate.
Un orden estable necesita una clave única al final. Para paginar, exportar o comparar resultados, añade id como último criterio cuando los anteriores puedan repetirse.
Ordenar por alias o expresiones
SELECT nombre,
precio * stock AS valor_stock
FROM productos
ORDER BY valor_stock DESC, id;Usar el alias evita repetir la expresión y hace más legible la intención. La disponibilidad de alias en ORDER BY es común, aunque las reglas exactas se complican en consultas de conjuntos.
Dónde aparecen los valores NULL
La posición predeterminada de NULL no es idéntica en todos los motores. PostgreSQL admite NULLS FIRST y NULLS LAST; otros motores requieren una expresión adicional. Si la posición de los nulos importa, no confíes en el valor predeterminado.
Errores frecuentes
Limitar antes de definir un orden suficiente
LIMIT 10 sin un orden estable no significa “los primeros diez” en un sentido reproducible.
Ordenar por posición
ORDER BY 2 es válido en varios motores, pero se rompe silenciosamente si cambia la lista de columnas. Preferir nombres o alias mejora el mantenimiento.
Práctica: pedidos de mayor importe
Muestra los cuatro pedidos más altos
Devuelve id, estado y total. Ordena el total de mayor a menor y usa el id ascendente para resolver empates.
total DESC.id ASC después de una coma.Solución razonada
SELECT id,
estado,
total
FROM pedidos
ORDER BY total DESC, id ASC
LIMIT 4;El resultado comienza con los pedidos 106, 116, 108 y 111. Los dos últimos tienen total 249,0 y quedan ordenados por id.
Compatibilidad entre motores
ORDER BY, ASC y DESC son comunes. La sintaxis para controlar nulos y limitar filas cambia. SQL Server integra la paginación mediante OFFSET y FETCH dentro de ORDER BY.
Qué debes recordar
- Sin
ORDER BYno hay orden garantizado. - Los criterios se aplican de izquierda a derecha.
- Añade una clave única para resolver todos los empates.
- Define un orden estable antes de limitar o paginar.
Para requisitos más específicos, puedes controlar la posición de NULL con NULLS FIRST/LAST o construir un orden personalizado con CASE.