Aniversário
Alura 12 anos

20% OFF

Falta pouco!

00

DIAS

00

HORAS

00

MIN

00

SEG

Em SQL, null é null, vazio é vazio

Alura
Guilherme Silveira
Guilherme Silveira

Compartilhe

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?


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?

Banner promocional da Alura com fundo azul escuro. No topo, o logotipo da Alura. O texto diz: “O presente é SEU. Chegou o Aniversário da Alura e preparamos uma surpresa PARA VOCÊ. 20% OFF para estudar na Alura. Válido de 12 a 23 de maio”. Abaixo, um botão rosa com a frase “APROVEITE O DESCONTO”. Na parte inferior do banner, há a imagem de uma caixa de presente azul com laço brilhante.

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!

Guilherme Silveira
Guilherme Silveira

Co-fundador da Alura, da Caelum e do GUJ. Com 18 anos de ensino nas áreas de programação e dados, criou mais de 100 cursos. Possui formação em engenharia de software, viés matemático e criativo, além de ser medalhista de ouro em competições nacionais de computação, tendo representado o Brasil nos mundiais. Participante de comunidades open source e de educação em tecnologia, tendo escrito 7 livros. Faz mágica e fala coreano no tempo livre.

Veja outros artigos sobre Data Science