ORDER BY en SQL: qué es, cómo funciona y ejemplos prácticos

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:

idnombreprecio
1Teclado25
2Monitor180
3Notebook750
4Mouse20

Consulta:

SELECT * FROM productos
ORDER BY precio ASC;

Resultado:

idnombreprecio
4Mouse20
1Teclado25
2Monitor180
3Notebook750

👉 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 o NULLS 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

  1. Usar ORDER BY sin especificar ASC/DESC y asumir que es descendente
    👉 Por defecto es ASC.
  2. Ordenar por columnas que no están en el SELECT
    👉 En algunos motores se permite, en otros no.
  3. Confundir GROUP BY con ORDER BY
    👉 GROUP BY agrupa, ORDER BY solo ordena.
  4. 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 o NULLS 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 y LIMIT.
  • PostgreSQL: soporta NULLS FIRST / LAST.
  • SQL Server: soporta ORDER BY con TOP.
  • Oracle: soporta ORDER BY con FETCH 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.

Scroll al inicio