Em SQL, null é null, vazio é vazio
![Em SQL, null é null, vazio é vazio](https://www.alura.com.br/artigos/assets/code/em-sql-nulo-e-nulo-vazio-e-vazio.1722039953.png)
Considerando uma tabela de dados Alunos
, com campo nome
e campo empresa
, somo trazer quem não preencheu o campo empresa
? Uma das soluções é procurar pela string vazia:
select nome, empresa from Alunos a where empresa = '';
> Paulo,
> ...
> Carlos,
> Total: 1000 alunos
Mas eu sei que tenho mais de 1000 alunos que ainda não preencheram este campo, onde estão eles?
![Banner da Escola de Data Science: Matricula-se na escola de Data Science. Junte-se a uma comunidade de mais de 500 mil estudantes. Na Alura você tem acesso a todos os cursos em uma única assinatura; tem novos lançamentos a cada semana; desafios práticos. Clique e saiba mais!](assets/alura-matricula-maior-escola-tecnologia-brasil-mais-500-mil-estudantes/matricula-escola-data-science-alura-saiba-mais-versao-mobile.png)
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 orientação a objetos, 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 um resultado errado:
select * from Alunos a
where (empresa = '' or empresa is null)
and cadastro > '20150101';
Usa o valor padrão. Usa o default e pare 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!