La cláusula ORDER BY en SQL se utiliza para ordenar los resultados de una consulta según una o varias columnas.
Podemos ordenar en forma ascendente (ASC) o descendente (DESC), e incluso combinar múltiples criterios de ordenamiento.
👉 Es fundamental cuando queremos que los datos tengan un orden específico: los productos más caros, los empleados más antiguos o las fechas más recientes.
Sintaxis básica de ORDER BY
SELECT columnas
FROM tabla
[WHERE condición]
ORDER BY columna [ASC | DESC];
columna
: el campo por el que se ordena.ASC
: orden ascendente (menor a mayor). Es el valor por defecto.DESC
: orden descendente (mayor a menor).
Si no conocés bien la cláusula WHERE en SQL, revisá cómo se combina con ORDER BY para filtrar y luego ordenar.
Ejemplo básico de ORDER BY
Tabla productos
:
id | nombre | precio |
---|---|---|
1 | Teclado | 25 |
2 | Monitor | 180 |
3 | Notebook | 750 |
4 | Mouse | 20 |
Consulta:
SELECT * FROM productos
ORDER BY precio ASC;
Resultado:
id | nombre | precio |
---|---|---|
4 | Mouse | 20 |
1 | Teclado | 25 |
2 | Monitor | 180 |
3 | Notebook | 750 |
👉 Los productos aparecen ordenados por precio, de menor a mayor.
ORDER BY descendente
SELECT * FROM productos
ORDER BY precio DESC;
👉 Ahora el más caro aparece primero.
Ordenar por múltiples columnas
Podemos ordenar primero por una columna y luego por otra:
SELECT nombre, departamento, salario
FROM empleados
ORDER BY departamento ASC, salario DESC;
👉 Ordena a los empleados por departamento (A–Z) y, dentro de cada uno, por salario de mayor a menor.
ORDER BY con alias
Si definimos un alias en la consulta, podemos usarlo en el ORDER BY
:
SELECT nombre, salario * 12 AS salario_anual
FROM empleados
ORDER BY salario_anual DESC;
👉 Ordena por el cálculo del salario anual.
ORDER BY con posición de columna
También podemos ordenar indicando la posición de la columna seleccionada:
SELECT nombre, salario
FROM empleados
ORDER BY 2 DESC;
👉 Ordena por la segunda columna del SELECT (salario
).
⚠️ No es recomendable en proyectos grandes porque reduce la legibilidad del código.
ORDER BY con funciones
Podemos ordenar según el resultado de una función:
SELECT nombre, LENGTH(nombre) AS longitud
FROM clientes
ORDER BY LENGTH(nombre) DESC;
👉 Muestra primero los nombres más largos.
ORDER BY y valores NULL
El tratamiento de NULL
depende del motor:
- MySQL: los
NULL
se consideran menores que cualquier valor. - PostgreSQL: permite controlar explícitamente con
NULLS FIRST
oNULLS LAST
.
Ejemplo en PostgreSQL:
SELECT nombre, fecha_baja
FROM empleados
ORDER BY fecha_baja DESC NULLS LAST;
👉 Muestra empleados activos al final de la lista.
ORDER BY con LIMIT y OFFSET
ORDER BY
se usa junto con LIMIT
y OFFSET
para paginar resultados:
SELECT * FROM pedidos
ORDER BY fecha DESC
LIMIT 10 OFFSET 20;
👉 Devuelve 10 pedidos, saltando los primeros 20, ordenados por fecha.
Ejemplo avanzado: top 5 productos más vendidos
SELECT producto_id, SUM(cantidad) AS total_vendido
FROM ventas
GROUP BY producto_id
ORDER BY total_vendido DESC
LIMIT 5;
👉 Devuelve los 5 productos más vendidos, del más popular al menos vendido.
Aquí se combinan GROUP BY y SUM() para agrupar y calcular totales antes de ordenar.
Diferencias entre ORDER BY y GROUP BY
- ORDER BY → organiza los resultados.
- GROUP BY → agrupa filas para aplicar funciones de agregación (
SUM()
,AVG()
, etc.).
Ejemplo combinado:
SELECT departamento, AVG(salario) AS promedio
FROM empleados
GROUP BY departamento
ORDER BY promedio DESC;
👉 Devuelve departamentos ordenados por el salario promedio más alto.
Errores comunes con ORDER BY
- Usar ORDER BY sin especificar ASC/DESC y asumir que es descendente
👉 Por defecto es ASC. - Ordenar por columnas que no están en el SELECT
👉 En algunos motores se permite, en otros no. - Confundir GROUP BY con ORDER BY
👉GROUP BY
agrupa,ORDER BY
solo ordena. - No usar ORDER BY con LIMIT
👉 Sin un orden, el conjunto de resultados puede variar entre ejecuciones.
Buenas prácticas con ORDER BY
- Usar siempre índices en columnas frecuentes. Revisá cómo funcionan los índices en SQL para mejorar el rendimiento.
- Evitar ordenar por posición de columna (ej.
ORDER BY 2
). - En PostgreSQL, usar
NULLS FIRST
oNULLS LAST
para un control total. - Asegurarse de que la columna usada en
ORDER BY
tenga índices si se consulta con mucha frecuencia. - Usar alias claros (ej.
salario_anual
). Más sobre esto en la sección de alias en SQL.
ORDER BY en distintos motores de base de datos
- MySQL / MariaDB: soporta
ORDER BY
con expresiones, alias yLIMIT
. - PostgreSQL: soporta
NULLS FIRST / LAST
. - SQL Server: soporta
ORDER BY
conTOP
. - Oracle: soporta
ORDER BY
conFETCH FIRST
.
👉 Es parte del estándar SQL, pero con variaciones en el manejo de NULL
y paginación.
Preguntas frecuentes (FAQ)
1. ¿ORDER BY es obligatorio en SQL?
No, es opcional. Si no se usa, el orden de las filas no está garantizado.
2. ¿Cuál es el orden por defecto?ASC
(ascendente).
3. ¿Se puede ordenar por columnas que no aparecen en el SELECT?
Depende del motor. PostgreSQL sí lo permite, SQL Server no en algunos casos.
4. ¿Cómo se ordenan los valores NULL?
Depende del motor. En PostgreSQL se controla con NULLS FIRST / LAST
.
5. ¿ORDER BY afecta el rendimiento?
Sí, puede ser costoso en tablas grandes, especialmente si no hay índices adecuados.
Conclusión
La cláusula ORDER BY en SQL es fundamental para organizar datos de manera útil y legible.
- Permite ordenar de forma ascendente o descendente.
- Se puede aplicar a múltiples columnas, alias, funciones y expresiones.
- Es clave para reportes, listados y paginación.
Dominar ORDER BY
te da control sobre cómo se presentan los resultados en tus consultas y aplicaciones.
Domina el ordenamiento de resultados en ORDER BY y LIMIT y visita el Glosario SQL completo.