Em MySQL um valor NULL ou vazio, quando se ordena, tem mais peso que qualquer valor. No entanto, existe outras base de dados em que isto não é assim. Por exemplo, em Oracle um valor NULL ou vazio, quando se ordena, tem menos peso que qualquer valor.
Dependendo da utilização que se queira dar, esta situação pode ser boa ou má.
Normalmente necessito ordenar determinados campos tanto por valores alfabéticos como numéricos, mas alguns desses campos por vezes contêm valores NULL ou vazios.
Quando ordeno estes campos ascendentemente (ASC), os valores NULL ou vazios ficam nas primeiras posições do resultado e quando ordeno estes campos descendentemente (DESC), os valores NULL ou vazios ficam nas últimas posições do resultado.
Até aqui tudo bem, já que os valores NULL ou vazio tem mais peso que qualquer valor.
Temos a seguinte tabela:

Vamos a executar o seguinte comando na base de dados:
Resultado:

Mas, e se eu quero ordenar um campo ascendentemente (ASC) sem que me saiam nas primeiras posições do resultado os valores NULL ou vazios?
Analisando os comandos SQL de MySQL ou o respectivo manual não se pode…
Existe outras base de dados como PostgreSQL que tem comandos específicos para estas situações, do tipo “ORBER BY … NULLS FIRST” ou “ORDER BY … NULLS LAST”. Com estes comandos podemos determinar se queremos que os valores NULL ou vazios saiam no princípio ou no fim dos resultados.
Mas existe alguma solução para fazer o mesmo em MySQL?
Existe algumas soluções que vamos abordar que solucionam esta pequena lacuna de MySQL.
Vamos a executar o seguinte comando na base de dados:
Resultado:

Parece que resolvemos o problema dos valores NULL, mas não dos valores vazios.
Basicamente o que fizemos neste comando foi criar um novo campo chamado “isNULL” e verificar se o valor “value” é NULL. Se é NULL inserimos um “1″ na linha do campo “isNULL”, se não é NULL então inserimos um 0. Depois ordenamos ascendentemente os campos “isNULL” e “value” de modo a que os valores NULL saiam no final do resultado.
Vamos a executar o seguinte comando na base de dados:
Resultado:

Continuamos sem resolver o problema dos valores vazios, mas desta vez solucionamos o problema dos valores NULL sem criar um novo campo e com um comando mais resumido e fácil de utilizar.
O funcionamento deste comando é similar ao referido acima, só que se faz tudo junto da instrução “ORDER BY”.
Vamos a executar o seguinte comando na base de dados:
Resultado:

Agora resolvemos o problema para os valores NULL e para os valores vazios.
Bastou adicionar um “OR” e o respectivo campo e valor e já esta.
Como podemos definir um valor, isto quer dizer que em vez de campos vazios, podemos usar outro tipo de valores (Ex.: espaços em branco).
Espero que vos ajude.