Em SQL nulo é nulo, vazio é vazio

Como trazer quem não preencheu o campo cargo mesmo?

select nome, empresa from Alunos a
   where empresa = '';

> Paulo, 
> ...
> Carlos,
> Total: 1000 alunos 

Para de brincadeira, sei que tenho mais de 1000 alunos que ainda não preencheram este campo, cade eles?

select nome, empresa from Alunos a
   where empresa is null;

> Guilherme, NULL 
> ...
> Ana, NULL
> Total: 2000 alunos 

O que acontece que alguns alunos estão em branco, outros estão nulos?

Muito cuidado quando criar suas tabelas. Em geral fazemos como com qualquer linguagem de programação: definimos uma variável e não damos valor padrão a ela. Isso acontece direto em OO, definimos variáveis membro sem valor padrão. Resultado?

Algumas pessoas não editaram o perfil, e continuam com o valor padrão do banco(NULL). Outras editaram mas não preencheram e estão agora com valor em branco. E agora toda query que você vai fazer na tua vida você tem que verificar:

select * from Alunos a
     where empresa = '' or empresa is null
           and cadastro > '20150101';

Pior ainda, além do fato que já vimos que o OR é um horror na Terra, temos que lembrar de colocar ele entre parenteses pra não dar caca:

select * from Alunos a
     where (empresa = '' or empresa is null)
           and cadastro > '20150101';

Deixa disso. Usa o valor padrão. Usa o default e para de se preocupar:

alter table Alunos
   modify column empresa varchar(200)
   default '' not null;

Agora sim você tem certeza que todas as queries só precisam verificar por valores vazios. A chance de errar? Bem menor!


Tech Education Leader no Alura

Próximo ArtigoFenômeno Phi e a percepção de movimento