Ordenar campos con valores NULL en MySQL: Por qué los NULL primero

Ordenar campos en una base de datos no suele ser problema en ningún motor hasta que llegamos a MySQL, precisamente hoy me encontré con ese problema, porque necesité ordenar una tabla usando una columna que contenía valores NULL, pero además de ellos necesité que si existía un valor nulo, éste tendría que ir al final (y no al principio como noté que sucedía). En otros motores de base de datos, ésto no suele ser un problema, pero vaya que lo es en MySQL (no estoy seguro si en MariaDB se presenta también, pero asumo que sí).
La situación es esta:
MySQL considera a los valores NULL menor que los enteros a menos que la columna esté con signo negativo (Característica no documentada)
Sí señor, así como suena, no está documentado cómo solucionar este problema, aunque sí está la nota que dice que: Los valores NULL en un order by ascendente aparecerán primero.
Por lo anterior me puse a la tarea de encontrar una forma (que no incluyera una subconsulta por cuestiones de rendimiento) para resolver este problema.
La solución la encontré en esta página, pero con el ejemplo en lenguaje Ruby:
Anteponemos el símbolo menos (-) a la columna con los campos nulos en la sección ORDER BY de la consulta e indicamos el sentido contrario del ordenamiento (ASC en lugar de DESC y viceversa)… He aquí un ejemplo para organizar ascendentemente a “campo1″ de la tabla “ejemplo”

SELECT *
FROM ejemplo
ORDER BY -campo DESC

Espero que les sea de ayuda.


2 Responses to “Ordenar campos con valores NULL en MySQL: Por qué los NULL primero”

Leave a Reply