Introdução
No mundo dos bancos de dados, os valores NULL muitas vezes podem parecer a proverbial ovelha negra. Eles representam dados ausentes, indefinidos ou desconhecidos e podem representar desafios únicos no gerenciamento e análise de dados. Think about que você está analisando um banco de dados de vendas e algumas entradas não possuem suggestions do cliente ou quantidades de pedidos. Compreender como lidar eficazmente com valores NULL em SQL é essential para garantir a recuperação precisa de dados e análises significativas. Neste guia, nos aprofundaremos nas nuances dos valores NULL, exploraremos como eles afetam as operações SQL e forneceremos técnicas práticas para gerenciá-los.

Resultados de aprendizagem
- Entenda o que os valores NULL representam em SQL.
- Identifique o impacto dos valores NULL nas consultas e cálculos de dados.
- Make the most of funções e técnicas SQL para lidar com valores NULL de maneira eficaz.
- Implemente práticas recomendadas para gerenciar NULLs no design e consulta de banco de dados.
O que são valores NULL em SQL?
NULL é um marcador especial em SQL usado para apontar para o fato de que o valor de algum fator não é conhecido. Também deve ser entendido que NULL não é igual a ”, 0 e outros valores semelhantes, mas, em vez disso, aponta para a ausência de valor. Em SQL, NULL pode ser usado em qualquer tipo de atributo, seja inteiro, string ou knowledge.
Exemplo de valores NULL
Considere uma tabela chamada workers
:
Nesta tabela, o department_id
para John e Bob é NULL, indicando que o departamento deles é desconhecido. O e-mail de Alice também é NULL, o que significa que não há nenhum e-mail registrado.
Impacto dos valores NULL em consultas SQL
SQL NULL definiu quaisquer colunas que não contenham dados e seu uso influencia o desempenho das consultas e quais resultados são entregues. Uma das coisas que todos precisam saber para escrever boas consultas e poder trabalhar corretamente com os dados é o comportamento dos valores NULL. Neste weblog, explicarei algumas abordagens, dependendo se os campos contêm o valor NULL e a perspectiva em que os campos são considerados, para consultas SQL para comparação, cálculo, operações lógicas e assim por diante.
Comparações com NULL
Ao realizar comparações em SQL, é essencial entender que valores NULL não equivalem a zero ou a uma string vazia. Em vez disso, NULL representa um valor desconhecido. Como resultado, qualquer comparação direta envolvendo NULL produzirá um resultado UNKNOWN, em vez de TRUE ou FALSE.
Exemplo:
SELECT * FROM workers WHERE department_id = NULL;
Saída: Nenhuma linha será retornada porque as comparações com NULL usando =
não avalie como TRUE.
Para verificar corretamente os valores NULL, use:
SELECT * FROM workers WHERE department_id IS NULL;
Supondo que workers
tabela tem:
ID_do_funcionário | primeiro nome | departamento_id |
---|---|---|
1 | John | 101 |
2 | Jane | NULO |
3 | Prumo | 102 |
4 | Alice | NULO |
Saída:
ID_do_funcionário | primeiro nome | departamento_id |
---|---|---|
2 | Jane | NULO |
4 | Alice | NULO |
Lógica Booleana e NULLs
Valores NULL afetam a lógica booleana em consultas SQL. Quando NULL está envolvido em operações lógicas, o resultado muitas vezes pode levar a resultados inesperados. Em SQL, a lógica de três valores (TRUE, FALSE, UNKNOWN) significa que se qualquer operando em uma expressão lógica for NULL, a expressão inteira poderá ser avaliada como UNKNOWN.
Exemplo:
SELECT * FROM workers WHERE first_name="John" AND department_id = NULL;
Saída: Esta consulta não retornará resultados, pois a condição que envolve NULL
será avaliado como DESCONHECIDO.
Para operações lógicas corretas, verifique explicitamente NULL:
SELECT * FROM workers WHERE first_name="John" AND department_id IS NULL;
Saída:
ID_do_funcionário | primeiro nome | departamento_id |
---|---|---|
Sem saída |
Funções de agregação
Valores NULL têm um impacto único em funções agregadas, como SUM
, AVG
, COUNT
e outros. A maioria das funções agregadas ignora valores NULL, o que significa que não contribuirão para o resultado dos cálculos. Esse comportamento pode levar a conclusões enganosas se você não estiver ciente dos NULLs presentes no seu conjunto de dados.
Exemplo:
SELECT AVG(wage) FROM workers;
Supondo que workers
tabela tem:
ID_do_funcionário | salário |
---|---|
1 | 50.000 |
2 | NULO |
3 | 60.000 |
4 | NULO |
Saída:
A média é calculada a partir dos salários não NULOS (50.000 e 60.000).
Se todos os valores em uma coluna forem NULL:
SELECT COUNT(wage) FROM workers;
Saída:
Neste caso, COUNT conta apenas valores não NULL.
Valores DISTINTOS e NULL
Ao usar o DISTINCT
palavra-chave, os valores NULL são tratados como um único valor exclusivo. Assim, se você tiver várias linhas com NULLs em uma coluna, o DISTINCT
consulta retornará apenas uma instância de NULL.
Exemplo:
SELECT DISTINCT department_id FROM workers;
Supondo que workers
tabela tem:
ID_do_funcionário | departamento_id |
---|---|
1 | 101 |
2 | NULO |
3 | 102 |
4 | NULO |
Saída:
Mesmo se houver vários NULLs, apenas um NULL aparecerá no resultado.
Técnicas para lidar com valores NULL
O tratamento de valores NULL é essential para manter a integridade dos dados e garantir resultados de consulta precisos. Aqui estão algumas técnicas eficazes:
Usando IS NULL e IS NOT NULL
A maneira mais direta de filtrar valores NULL é usando o IS NULL
e IS NOT NULL
predicados. Isso permite que você verifique explicitamente valores NULL em suas consultas.
Exemplo:
SELECT * FROM workers WHERE department_id IS NULL;
Saída:
ID_do_funcionário | primeiro nome | departamento_id |
---|---|---|
2 | Jane | NULO |
4 | Alice | NULO |
Para encontrar funcionários com um departamento atribuído:
SELECT * FROM workers WHERE department_id IS NOT NULL;
Saída:
ID_do_funcionário | primeiro nome | departamento_id |
---|---|---|
1 | John | 101 |
3 | Prumo | 102 |
Usando a função COALESCE
O COALESCE
função retorna o primeiro valor não NULL na lista de argumentos. Isso é útil para fornecer valores padrão quando NULL é encontrado.
Exemplo:
SELECT first_name, COALESCE(department_id, 'No Division') AS division FROM workers;
Saída:
primeiro nome | departamento |
---|---|
John | 101 |
Jane | Nenhum departamento |
Prumo | 102 |
Alice | Nenhum departamento |
Usando a função NULLIF
O NULLIF
a função retorna NULL se os dois argumentos forem iguais; caso contrário, ele retornará o primeiro argumento. Isso pode ajudar a evitar comparações indesejadas e lidar com padrões de maneira elegante.
Exemplo:
SELECT first_name, NULLIF(department_id, 0) AS department_id FROM workers;
Supondo department_id
às vezes é definido como 0 em vez de NULL:
Saída:
primeiro nome | departamento_id |
---|---|
John | 101 |
Jane | NULO |
Prumo | 102 |
Alice | NULO |
Usando a instrução CASE
O CASE
instrução permite lógica condicional em consultas SQL. Você pode usá-lo para substituir valores NULL por substitutos significativos com base em condições específicas.
Exemplo:
SELECT first_name,
CASE
WHEN department_id IS NULL THEN 'Unknown Division'
ELSE department_id
END AS division
FROM workers;
Saída:
primeiro nome | departamento |
---|---|
John | 101 |
Jane | Departamento desconhecido |
Prumo | 102 |
Alice | Departamento desconhecido |
Usando funções agregadas com tratamento NULL
Ao usar funções agregadas como COUNT
, SUM
, AVG
and many others., é essencial lembrar que eles ignoram valores NULL. Você pode combinar essas funções com COALESCE
ou técnicas semelhantes para gerenciar NULLs em resultados agregados.
Exemplo:
Para contar quantos funcionários têm um departamento atribuído:
SELECT COUNT(department_id) AS AssignedDepartments FROM workers;
Saída:
Se você quiser incluir uma contagem de valores NULL:
SELECT COUNT(*) AS TotalEmployees,
COUNT(department_id) AS AssignedDepartments,
COUNT(*) - COUNT(department_id) AS UnassignedDepartments
FROM workers;
Saída:
Whole de funcionários | Departamentos Atribuídos | Departamentos não atribuídos |
---|---|---|
4 | 2 | 2 |
Melhores práticas para gerenciar valores NULL
Veremos agora as melhores práticas para gerenciar o valor NULL.
- Use NULL propositalmente: use NULL apenas para indicar a ausência de um valor. Esta distinção é essential; NULL não deve ser confundido com zero ou com uma string vazia, pois cada um tem seu próprio significado no contexto de dados.
- Estabeleça restrições de banco de dados: implemente restrições NOT NULL sempre que aplicável para evitar entradas NULL não intencionais em campos críticos. Isso ajuda a reforçar a integridade dos dados e garante que as informações essenciais estejam sempre presentes.
- Normalize seu esquema de banco de dados: projete adequadamente o esquema do seu banco de dados para minimizar a ocorrência de valores NULL. Ao organizar os dados em tabelas e relacionamentos apropriados, você pode reduzir a necessidade de NULLs e promover uma representação de dados mais clara.
- Make the most of valores padrão sensatos: ao projetar tabelas, considere usar valores padrão razoáveis para preencher possíveis entradas NULL. Essa abordagem ajuda a evitar confusão e garante que os usuários entendam o contexto dos dados sem encontrar NULL.
- Estratégias de manipulação de documentos NULL: documente claramente sua abordagem para lidar com valores NULL em sua organização. Isso inclui o estabelecimento de diretrizes para entrada de dados, relatórios e análise para promover consistência e compreensão entre os membros da equipe.
- Revise e audite regularmente os dados: understand revisões e auditorias periódicas de seus dados para identificar e gerenciar valores NULL de maneira eficaz. Essa prática ajuda a manter a qualidade e a integridade dos dados ao longo do tempo.
- Eduque os membros da equipe: Reconhecer e explicar os valores NULOS aos funcionários para que eles entendam sua importância e seu manejo adequado. Informar a equipe com o conhecimento correto é essential para tomar as decisões corretas em relação aos dados e relatórios.
Erros comuns a serem evitados com NULLs
Vamos agora explorar os erros comuns que podemos evitar com NULLs.
- Confundindo NULL com Strings Zero ou Vazias: Os primeiros e mais frequentemente encontrados antipadrões são NULL, usado como zero ou uma string vazia. Reconhecer que NULL é usado para denotar a ausência de valor é essential para evitar interpretações errôneas dos dados.
- Usando o operador de igualdade para comparações NULL: Não use operadores de igualdade (=) ao testar valores NULL, pois isso resultará em uma condição UNKNOWN. Em vez disso, você deve usar os predicados IS NULL ou IS NOT NULL para comparação.
- Negligenciando NULLs em funções agregadas: Alguns dos problemas comuns incluem o fato de que a maioria dos usuários parece ignorar o fato de que funções agregadas como SUM, AVG e COUNT sempre omitirão valores NULL resultantes de sinais errados. Tenha cuidado com dados agregados e NULLs existem mesmo em registros contendo apenas números inteiros.
- Não considerando NULLs na lógica de negócios: não levar em conta valores NULL na lógica de negócios pode levar a resultados inesperados em aplicativos e relatórios. Sempre inclua verificações de NULL ao executar operações lógicas.
- Uso excessivo de NULLs: Embora NULLs possam ser úteis, seu uso excessivo pode complicar a análise de dados e os relatórios. Esforce-se para obter um equilíbrio, garantindo que os NULLs sejam usados adequadamente, sem sobrecarregar o conjunto de dados.
- Ignorando a documentação: Negligenciar a documentação de suas estratégias para gerenciar valores NULL pode causar confusão e inconsistência entre os membros da equipe. Documentação clara é essencial para um gerenciamento de dados eficaz.
- Negligenciando auditorias regulares de valores NULL: auditorias regulares de valores NULL ajudam a manter a integridade e a qualidade dos dados. Ignorar esta etapa pode resultar no acúmulo de erros e interpretações errôneas na análise de dados.
Conclusão
O tratamento de valores NULL em SQL requer atenção cuidadosa para evitar distorções e afetar a análise de dados. Você pode resolver problemas com NULLs usando NULL intencionalmente, configurando restrições no banco de dados e auditando informações diariamente. Além disso, existem armadilhas específicas com as quais, se estiver familiarizado – como confundir NULL com zero ou não levar em conta NULLs em operações lógicas – melhorarão os métodos profissionais de manipulação de dados. Finalmente, e mais importante, um gerenciamento apropriado de valores NULL aumenta a credibilidade das consultas e dos relatórios e incentiva a apreciação dos ambientes de dados e, portanto, a formação de decisões/insights corretos sobre dados específicos.
Perguntas frequentes
A. NULL representa um valor ausente ou indefinido em SQL, indicando a ausência de dados.
A. Uso IS NULL
ou IS NOT NULL
para verificar valores NULL em consultas SQL.
R. Sim, as funções agregadas ignoram valores NULL, o que pode afetar os resultados.
A. Você pode usar o COALESCE
, IFNULL
ou ISNULL
funções para substituir valores NULL por um padrão especificado.
R. Embora NULLs possam ser necessários, geralmente é melhor minimizar seu uso aplicando restrições NOT NULL e fornecendo valores padrão quando apropriado.