SQL: entenda a diferença entre NULL e valor vazio e como tratar esses campos

Alura
Guilherme Silveira
Guilherme Silveira

Compartilhe

Considere uma tabela chamada Alunos, que possui os campos nome e empresa. Se você estiver revisando conteúdo técnico ou realizando consultas SQL, pode surgir a dúvida: como encontrar os alunos que não preencheram o campo empresa? Uma das soluções é procurar pela string vazia: 

SELECT nome, empresa FROM Alunos WHERE empresa = ''; 
> Paulo,  
> ...  
> Carlos,  
> Total: 1000 Alunos 

No entanto, sabemos que existem mais de 1000 registros sem o campo empresa preenchido. Onde estão esses dados? 

SELECT nome, empresa FROM Alunos WHERE empresa IS NULL; 
> Guilherme, NULL  
> ...  
> Ana, NULL  
> Total: 2000 Alunos

Diferença entre NULL e valor vazio em SQL 

NULL em SQL representa a ausência de valor, ou seja, o campo não recebeu informação nenhuma, como se fosse indefinido. Já o valor vazio ('' - string vazia) significa que o campo existe e foi definido como vazio de propósito.

Quando uma tabela é criada sem especificar DEFAULT e NOT NULL, o valor padrão do SQL é NULL. Assim, registros inseridos sem valor para a coluna ficam como NULL. Já os registros onde o usuário editou o perfil mas deixou o campo vazio recebem string vazia (''). Isso cria inconsistência nos dados. 

É importante ter atenção ao criar tabelas no banco de dados. Frequentemente, assim como em linguagens de programação, campos são definidos sem um valor padrão. O resultado disso? 

Algumas pessoas não editaram o perfil, mantendo o valor padrão do banco (NULL). Outras editaram, mas deixaram o campo em branco. Por conta disso, em toda consulta será necessário verificar ambas as possibilidades: 

SELECT * FROM Alunos WHERE (empresa = '' OR empresa IS NULL) AND cadastro > '20150101'; 

A escolha entre usar NULL ou string vazia depende do significado semântico dos dados. NULL representa 'valor desconhecido ou não fornecido', enquanto string vazia significa 'valor fornecido intencionalmente como vazio'.

Para campos opcionais onde não há distinção semântica necessária, usar DEFAULT '' NOT NULL simplifica queries e evita a necessidade de verificar ambas as condições.  

Portanto, defina um valor padrão na criação ou alteração da estrutura da tabela para evitar esse problema: 

ALTER TABLE Alunos MODIFY COLUMN empresa VARCHAR(200) DEFAULT '' NOT NULL; 

Assim, todas as consultas precisarão considerar apenas valores vazios para o campo empresa, reduzindo significativamente a chance de erros. 

Observação sobre performance:

Em MySQL, colunas NOT NULL podem ter melhor performance em índices e agregações. Porém, esteja ciente de que esta solução funciona melhor quando não há distinção semântica entre 'não fornecido' e 'vazio'.

Se seu domínio precisa diferenciar entre 'usuário não preencheu' (NULL) versus 'usuário apagou o conteúdo' (string vazia), você deve manter a coluna como nullable e tratar ambos os casos nas queries usando: WHERE empresa IS NULL OR empresa = ''" 

Banner promocional da Alura destacando oferta especial com até 40% de desconto em cursos de tecnologia. A mensagem convida a transformar a carreira na maior escola tech da América Latina, com botão “Aproveite” para acessar a promoção.

Boas práticas para revisão de conteúdo técnico em SQL 

  • Sempre defina claramente se o campo pode aceitar NULL ou não; 
  • Documente as regras de preenchimento dos campos ao revisar tabelas e sistemas; 
  • Considere padronizar o tratamento de campos vazios conforme a regra de negócio. 

Como aprender mais sobre SQL

No cenário atual, dados inconsistentes não são só um detalhe técnico, eles impactam diretamente análises, decisões e resultados de negócio.

Empresas precisam de profissionais que não apenas escrevem queries, mas entendem a estrutura dos dados, evitam inconsistências e garantem qualidade desde a modelagem até a consulta.

Na Trilha Conhecendo SQL, você desenvolve esse olhar: aprende a trabalhar com bancos de dados de forma prática, domina consultas essenciais e entende como estruturar informações de forma eficiente e escalável.

Comece agora e evolua de quem apenas consulta dados para quem realmente entende o que está fazendo.

Guilherme Silveira
Guilherme Silveira

Co-fundador da Alura. Com mais de 20 anos de ensino de tecnologia, 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