O valor null em consultas SQL

Publicação: 07/02/2019
Área:Desenvolvimento Web e Mobile

O valor null em consultas SQL

Em geral, consultas SQL costumam ser intuitivas até para quem não tem familiaridade com a linguagem. Uma consulta por todas as pessoas cuja idade é maior que 18 anos retorna exatamente a lista de entradas de dado cuja informação de idade é maior que 18.

Existe uma situação, porém, em que os retornos da linguagem SQL são diferentes daqueles que esperaríamos da consulta, em função da presença de campos cujo valor é null.

É fundamental, para entender estes casos, termos claro o significado de null. null não é falso, nem 0, null significa que a informação sobre aquele campo não está presente no banco de dados.

Observe a tabela a seguir e as consultas na sequência:

idnomeidadebloqueado
1Joãonullnão
2Pedro18sim
3Paulo25sim
4Maria7null
5Lucas9null


  • select * from cadastro
  • 1) select * from cadastro where idade >= 18
  • 2) select * from cadastro where idade < 18
  • 3) select * from cadastro where bloqueado = "sim"
  • 4) select * from cadastro where bloqueado <> "sim"
  • 5) select * from cadastro where bloqueado <> "sim" or bloqueado is null



Se você nunca utilizou SQL mas domina o inglês, ou tem um conhecimento superficial da linguagem, é provável que consiga prever o retorno de todas as consultas, com a possível exceção da consulta 4.

Na verdade, assim como as consultas 1 e 2 não retornaram os dados de João, cuja idade é null, as consultas 3 e 4 não retornaram os dados de Maria e Lucas, cuja informação de bloqueado é também null.

Só que para a maioria das pessoas é natural esperar que a consulta 4 retorne também os dados de Maria e Lucas, já que ambos não estão marcados como "sim" no campo bloqueado. Porém, o comportamento de uma linguagem precisa ser consistente. Assim, o SQL não vai retornar os campos null para um teste de condição, já que null indica não se saber qual o valor do campo, exceto para o teste "is null".

Confira no vídeo a seguir a demonstração de cada uma destas consultas e uma discussão mais detalhada de como é gerado o retorno de cada uma delas: