0Pricing
SQL Interview Prep · Lección

Ordenación por varias columnas y posición de NULL

Mezcle ASC y DESC y descubra cómo NULLS FIRST/LAST varía entre bases de datos

Ordenación por varias columnas y posición de NULL es una lección gratuita de SQL Interview Prep en CoddyKit. Esta es la lección 1 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de SQL Interview Prep, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de SQL Interview Prep incluye 4 lecciones en total.

Por qué la ordenación aparece en las entrevistas

Los entrevistadores recurren pronto a ORDER BY porque revela si comprende que un conjunto de resultados SQL está desordenado por defecto. Sin una ordenación explícita, la base de datos puede devolver las filas en cualquier orden.

Una pregunta inicial habitual es: "¿Cómo garantiza que las filas se devuelvan en un orden específico?" La única respuesta correcta es una cláusula ORDER BY explícita. Confiar en el orden de inserción, el orden de la clave primaria o el orden del índice es un error clásico de principiante.

En esta lección dominará las ordenaciones por varias columnas y la complicada cuestión de dónde aparecen los valores NULL.

Fundamentos de ASC y DESC

ORDER BY ordena de forma ascendente (ASC) por defecto. Solo necesita DESC para invertir el orden. La dirección se aplica por columna, no a toda la cláusula.

Consejo para entrevistas: indique que ASC es el valor predeterminado implícito, por lo que no es necesario escribirlo. Muchos candidatos creen erróneamente que un solo DESC invierte todas las columnas.

SELECT name, hire_date
FROM employees
ORDER BY hire_date DESC;

Ordenación por varias columnas

Enumere varias columnas separadas por comas. SQL ordena por la primera columna, después resuelve los empates con la segunda, y así sucesivamente. Piense en ello como una cadena de desempates.

El ejemplo ordena por departamento alfabéticamente y, dentro de cada departamento, por salario de mayor a menor.

  • Ordenación principal: department ascendente
  • Desempate: salary descendente
SELECT department, name, salary
FROM employees
ORDER BY department ASC, salary DESC;

Mezclar ASC y DESC

Una trampa frecuente en las entrevistas: cada columna tiene su propia dirección. Escribir ORDER BY a, b DESC ordena a de forma ascendente y b de forma descendente, no ambas de forma descendente.

Si quiere ambas en orden descendente, debe escribir ORDER BY a DESC, b DESC. Sea explícito cuando la pregunta combine direcciones.

SELECT region, sales_year, revenue
FROM sales
ORDER BY region ASC, sales_year DESC;

¿Dónde van los valores NULL?

Este es el núcleo de la lección. NULL significa desconocido, por lo que el estándar no impone una posición y las bases de datos no coinciden en el valor predeterminado:

  • PostgreSQL & Oracle: los valores NULL se ordenan al final en ASC y al principio en DESC.
  • MySQL & SQL Server: los valores NULL se ordenan al principio en ASC y al final en DESC (se consideran el valor más pequeño).

A los entrevistadores les encanta preguntar: "¿Dónde aparecen los valores NULL en esta ordenación?" La respuesta honesta es que depende del motor, a menos que lo controle explícitamente.

Controlar explícitamente la posición de NULL

Para hacer determinista la posición independientemente de los valores predeterminados del motor, use NULLS FIRST o NULLS LAST. PostgreSQL, Oracle y SQLite permiten hacerlo directamente.

La consulta siguiente fuerza las fechas de contratación desconocidas al final, aunque la columna se ordene de forma ascendente.

SELECT name, hire_date
FROM employees
ORDER BY hire_date ASC NULLS LAST;

Simular NULLS LAST en MySQL

MySQL no admite la palabra clave NULLS LAST. La solución alternativa portable consiste en usar una clave de ordenación inicial que indique si el valor es NULL.

La expresión hire_date IS NULL devuelve 0 para las fechas reales y 1 para los valores NULL. Ordenarla de forma ascendente coloca los valores NULL al final; después, la segunda clave ordena las fechas reales.

SELECT name, hire_date
FROM employees
ORDER BY (hire_date IS NULL) ASC, hire_date ASC;

Simular NULLS FIRST en SQL Server

SQL Server tampoco admite NULLS FIRST/LAST. Use una expresión CASE como clave de ordenación inicial. Aquí los valores NULL reciben el rango 0 para que aparezcan primero.

Vale la pena memorizar este patrón: una columna indicadora calculada colocada antes de la columna de ordenación real permite controlar por completo la posición de NULL en cualquier dialecto.

SELECT name, hire_date
FROM employees
ORDER BY CASE WHEN hire_date IS NULL THEN 0 ELSE 1 END,
         hire_date ASC;

Ejemplo resuelto: tabla de clasificación

Suponga que crea una tabla de clasificación: primero aparece la puntuación más alta y, en caso de empate, ocupa una posición superior el jugador que se registró antes. Los jugadores que nunca obtuvieron una puntuación (puntuación NULL) deben aparecer al final.

La ordenación necesita tres claves: un indicador de NULL, la puntuación en orden descendente y la fecha de registro en orden ascendente como desempate.

SELECT player, score, signup_date
FROM players
ORDER BY (score IS NULL) ASC,
         score DESC,
         signup_date ASC;

Advertencia sobre la estabilidad de la ordenación

Otra pregunta habitual es: "Si dos filas son iguales en todas las claves de ORDER BY, ¿en qué orden se devuelven?"

Respuesta: indefinido. Las ordenaciones SQL no garantizan estabilidad, por lo que las filas iguales pueden aparecer en cualquier orden relativo, y ese orden puede cambiar entre ejecuciones o después de modificar un índice.

La solución consiste en añadir un desempate completamente único, normalmente una clave primaria, para que el resultado sea reproducible.

SELECT id, name, salary
FROM employees
ORDER BY salary DESC, id ASC;

Nota de rendimiento sobre la ordenación

Ordenar puede ser costoso. Si ORDER BY coincide con un índice existente, con las mismas columnas y direcciones, el motor puede leer las filas ya ordenadas y omitir un paso de ordenación independiente.

Las direcciones incompatibles (por ejemplo, si el índice está completamente en orden ascendente pero usted ordena una columna de forma descendente) suelen impedirlo y obligan a ordenar en memoria o en disco. Mencionar esta relación entre el orden del índice y el coste de ordenación demuestra madurez ante el entrevistador.

Comprobación rápida

Ponga a prueba su comprensión de las reglas de dirección para varias columnas.

Resumen

Conclusiones principales sobre la ordenación por varias columnas y la posición de NULL:

  • Los conjuntos de resultados no están ordenados a menos que añada ORDER BY.
  • La dirección se aplica por columna; ASC es el valor predeterminado.
  • La posición de NULL varía según el motor: al final en ASC para Postgres/Oracle y al principio en ASC para MySQL/SQL Server.
  • Use NULLS FIRST/LAST cuando sea compatible, o un indicador inicial IS NULL / CASE en los demás casos.
  • Añada un desempate único (como la clave primaria) para obtener un orden reproducible.

Preguntas frecuentes

¿La lección «Ordenación por varias columnas y posición de NULL» es gratis?

Sí — el texto completo de «Ordenación por varias columnas y posición de NULL» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de SQL Interview Prep, actualiza a CoddyKit PRO. El curso de SQL Interview Prep incluye 4 lecciones en total.

¿Qué aprenderé en «Ordenación por varias columnas y posición de NULL»?

Mezcle ASC y DESC y descubra cómo NULLS FIRST/LAST varía entre bases de datos Practicas SQL Interview Prep con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar SQL Interview Prep?

No se requiere experiencia previa. SQL Interview Prep en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 1 de 4.

¿Cuánto tiempo toma la lección «Ordenación por varias columnas y posición de NULL»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de SQL Interview Prep?

Sí. Cada lección de SQL Interview Prep incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Ordenación por varias columnas y posición de NULL
  2. LIMIT, OFFSET y FETCH FIRST
  3. Devolver de forma fiable las filas superiores
  4. Ordenar por expresiones y alias
← Volver a SQL Interview Prep