- 1 1. Introdução
- 2 2. Fundamentos de NULL
- 3 3. Como Manipular NULL
- 4 4. Pesquisando Dados que Incluem NULL
- 5 5. NULL, Índices e Desempenho
- 6 6. NULL e Ordenação
- 7 7. Funções úteis para manipular NULL
- 8 8. Melhores Práticas para Lidar com NULL
- 9 9. Perguntas Frequentes (FAQ)
- 9.1 Q1: Qual a diferença entre NULL, uma string vazia (“”) e zero (0)?
- 9.2 Q2: Por que NULL = NULL não retorna TRUE?
- 9.3 Q3: O que devo ter cuidado ao buscar dados que incluem NULL?
- 9.4 Q4: Existem considerações sobre NULL e índices?
- 9.5 Q5: Qual a diferença entre COALESCE e IFNULL?
- 9.6 Q6: Como posso projetar meu banco de dados para evitar NULL?
- 9.7 Q7: As funções agregadas se comportam de forma diferente com NULL?
- 9.8 Q8: O NULL pode causar problemas em operações JOIN?
- 9.9 Resumo
- 10 10. Conclusão
1. Introdução
O MySQL é um sistema de gerenciamento de banco de dados usado em muitas aplicações e sistemas. Dentro do MySQL, o conceito de NULL é um dos tópicos que pode ser difícil para iniciantes entenderem. Compreender com precisão o que é NULL e como manipulá-lo é extremamente importante ao trabalhar com MySQL.
Neste artigo, fornecemos uma explicação abrangente — desde a definição básica de NULL no MySQL até como manipulá-lo, como pesquisar com ele, funções úteis relacionadas a NULL e pontos importantes a observar. Também incluímos uma seção de FAQ que responde a perguntas comuns sobre NULL.
Este artigo é destinado a leitores como:
- Iniciantes usando MySQL pela primeira vez
- Aprendizes intermediários que entendem SQL básico e querem aprender mais profundamente
- Engenheiros envolvidos no design e operações de banco de dados
Ao final deste artigo, você será capaz de:
- Compreender corretamente o que é NULL
- Manipular e pesquisar dados que incluem NULL
- Aprender melhores práticas para evitar problemas relacionados a NULL
Agora, vamos percorrer os fundamentos de NULL passo a passo.
2. Fundamentos de NULL
Ao trabalhar com bancos de dados, o conceito de NULL é extremamente importante. No entanto, NULL também é um dos elementos mais comumente mal compreendidos. Nesta seção, explicamos a definição básica e as propriedades de NULL em detalhes.
Definição de NULL
NULL representa um estado especial que significa “nenhum valor existe” ou “um valor desconhecido”. Isso é diferente de uma string vazia (“”) ou zero (0). Aqui está um exemplo mostrando as diferenças:
- NULL : Nenhum valor existe (um estado indefinido)
- String vazia (“”) : Um valor existe, mas seu conteúdo está vazio
- Zero (0) : Um valor existe, e esse valor é 0
Propriedades de NULL
- Como NULL se comporta em comparações No SQL, NULL é tratado com regras especiais. Por exemplo, observe os resultados dessas comparações:
SELECT NULL = NULL; -- Result: NULL SELECT NULL <> NULL; -- Result: NULL SELECT NULL IS NULL; -- Result: TRUE
- Comparar NULL com operadores de comparação normais (=, <, >, etc.) resulta em NULL.
- Para avaliar NULL corretamente, você deve usar
IS NULLouIS NOT NULL.
- NULL em operações aritméticas Qualquer operação aritmética que inclua NULL sempre retorna NULL. Exemplo:
SELECT 10 + NULL; -- Result: NULL SELECT NULL * 5; -- Result: NULL
- Operações lógicas com NULL Quando uma condição inclui NULL, o resultado também pode se tornar NULL. Veja os exemplos abaixo:
SELECT NULL AND TRUE; -- Result: NULL SELECT NULL OR FALSE; -- Result: NULL
Por que NULL causa problemas
Se você não manipular NULL adequadamente, pode encontrar problemas como:
- Resultados de pesquisa inesperados Por exemplo, a consulta a seguir exclui linhas onde
ageé NULL.SELECT * FROM users WHERE age > 20;
Como solução, você precisa incluir NULL na condição:
SELECT * FROM users WHERE age > 20 OR age IS NULL;
- Erros de cálculo e mal-entendidos sobre dados em branco Funções de agregação (SUM, AVG, etc.) ignoram NULL ao calcular. Como resultado, conjuntos de dados com muitos valores NULL podem produzir resultados não intencionais.
Resumo das regras básicas de NULL
- NULL representa um estado onde “nenhum valor existe.”
- Como os operadores de comparação normais não lidam adequadamente com NULL, use
IS NULLouIS NOT NULL. - Se NULL for incluído em operações aritméticas ou lógicas, o resultado também se torna NULL.
3. Como Manipular NULL
Ao trabalhar com NULL no MySQL, você precisa entender as maneiras corretas de manipulá-lo. Nesta seção, explicamos métodos específicos para inserir, atualizar e deletar NULL em detalhes.
Como definir NULL ao inserir dados
Ao inserir um novo registro em um banco de dados, você pode definir uma coluna como NULL. Abaixo estão exemplos concretos.
- Especificar explicitamente NULL
INSERT INTO users (name, age) VALUES ('Taro', NULL);
Nesta consulta, a coluna age não recebe um valor, e NULL é inserido.
- NULL como valor padrão Se NULL estiver configurado como valor padrão, omitir o valor inserirá automaticamente NULL.
CREATE TABLE users ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(50), age INT DEFAULT NULL ); INSERT INTO users (name) VALUES ('Hanako');
Neste exemplo, como nenhum valor explícito é fornecido para a coluna age, o NULL padrão é inserido.
Como definir NULL ao atualizar dados
Você também pode atualizar dados existentes para definir o valor de uma coluna como NULL. Aqui estão alguns exemplos.
- Atualizar um valor para NULL
UPDATE users SET age = NULL WHERE name = 'Taro';
Esta consulta define a coluna age como NULL para o registro cujo nome é “Taro”.
- Atualizações condicionais Você pode adicionar condições para definir NULL em situações específicas.
UPDATE users SET age = NULL WHERE age < 18;
Aqui, a coluna age é definida como NULL para todos os registros onde a idade é menor que 18.
Como usar NULL como condição ao excluir dados
Ao excluir dados que incluem NULL, você deve incluir NULL na condição. Use IS NULL, não um operador de comparação.
- Excluir linhas onde uma coluna é NULL
DELETE FROM users WHERE age IS NULL;
Esta consulta exclui registros onde a coluna age é NULL.
- Excluir linhas NULL com múltiplas condições
DELETE FROM users WHERE age IS NULL AND name = 'Taro';
Neste exemplo, apenas os registros onde age é NULL e name é “Taro” são excluídos.
Notas importantes ao manipular NULL
- Use
IS NULLcorretamente Ao usar NULL em uma condição, sempre useIS NULLouIS NOT NULL, não o operador=.SELECT * FROM users WHERE age = NULL; -- Incorrect SELECT * FROM users WHERE age IS NULL; -- Correct
Projete sua aplicação pensando no tratamento de NULL Ao manipular dados de uma aplicação, ter cuidado com como você trata NULL ajuda a evitar comportamentos indesejados.
Use transações Para operações de dados que envolvem NULL, considere usar transações para evitar alterações indesejadas.
4. Pesquisando Dados que Incluem NULL
Ao pesquisar dados no MySQL, lidar corretamente com NULL é extremamente importante. Como o NULL se comporta de forma diferente dos valores normais, requer cuidados especiais. Nesta seção, explicamos como pesquisar de forma eficiente quando o NULL está envolvido.
Formas básicas de pesquisar por NULL
Para pesquisar por NULL, use IS NULL e IS NOT NULL em vez dos operadores de comparação normais (=, <, >).
- Pesquisar por NULL
SELECT * FROM users WHERE age IS NULL;
Esta consulta recupera todos os registros onde a coluna age é NULL.
- Pesquisar por valores não-NULL
SELECT * FROM users WHERE age IS NOT NULL;
Esta consulta recupera todos os registros onde a coluna age não é NULL.
Pesquisando com condições complexas que incluem NULL
Como o NULL não pode ser tratado corretamente com operadores de comparação, tenha cuidado ao usá-lo em condições complexas.
- Incluir NULL em uma condição
SELECT * FROM users WHERE age > 20 OR age IS NULL;
Esta consulta recupera registros onde age é maior que 20 ou é NULL.
- Operador NOT e NULL
SELECT * FROM users WHERE NOT (age > 20 OR age IS NULL);
Esta consulta recupera registros onde age é 20 ou menos e não é NULL.
Usando NULL com o operador LIKE
O operador LIKE não pode ser usado contra NULL. Como NULL significa que nenhum valor existe, a consulta a seguir não retorna linhas NULL:
SELECT * FROM users WHERE name LIKE '%a%';
-- NULL values are not matched by this condition
Em vez disso, você precisa adicionar uma verificação de NULL:
SELECT * FROM users WHERE name LIKE '%a%' OR name IS NULL;
Funções de agregação e pesquisa com NULL
NULL é ignorado por muitas funções de agregação (SUM, AVG, etc.). Para obter resultados corretos, você precisa levar o NULL em conta.
- Função COUNT
SELECT COUNT(*) AS total_records, COUNT(age) AS non_null_ages FROM users;
COUNT(*): Conta todos os registros, incluindo aqueles com NULLCOUNT(column): Conta registros excluindo NULL- Outras funções de agregação
SELECT AVG(age) AS average_age FROM users WHERE age IS NOT NULL;
Isso calcula a média excluindo valores NULL.
Observações ao pesquisar por NULL
- Diferença entre
IS NULLe=Como o NULL não pode ser tratado por comparações normais, sempre useIS NULLouIS NOT NULL.SELECT * FROM users WHERE age = NULL; -- Incorrect SELECT * FROM users WHERE age IS NULL; -- Correct
- Manipulação de múltiplas condições Se NULL pode estar presente, você deve incluí-lo explicitamente na condição para evitar resultados indesejados.
SELECT * FROM users WHERE age > 20; -- NULL is excluded SELECT * FROM users WHERE age > 20 OR age IS NULL; -- Includes NULL
- Impacto de desempenho Ao incluir NULL nas condições, o uso de índices pode ser limitado em alguns casos. Recomendamos verificar a eficácia dos índices.
EXPLAIN SELECT * FROM users WHERE age IS NULL;
Resumo
Pesquisar por NULL corretamente é essencial para obter os resultados desejados. Ao buscar dados que incluem NULL, use IS NULL e IS NOT NULL adequadamente, e considere os impactos de desempenho e indexação.
5. NULL, Índices e Desempenho
Para otimizar o desempenho do banco de dados, o uso adequado de índices é essencial. No entanto, operações em colunas que contêm NULL podem afetar a eficiência dos índices. Nesta seção, explicamos a relação entre NULL e índices, seu impacto no desempenho e estratégias de otimização.
Criando índices em colunas que incluem NULL
No MySQL, você pode criar índices em colunas que contêm NULL. Por exemplo:
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(50),
age INT,
INDEX (age)
);
Neste caso, o índice na coluna age é válido mesmo que a coluna contenha valores NULL.
Usando índices com IS NULL e IS NOT NULL
Ao pesquisar com condições que incluem NULL, o índice pode ou não ser usado dependendo da consulta.
- Quando o índice é usado
SELECT * FROM users WHERE age IS NULL;
Nesta consulta, o índice pode ser usado, permitindo uma pesquisa eficiente.
- Quando o índice não é usado Se você usar condições complexas como as seguintes, o índice pode não ser aplicado.
SELECT * FROM users WHERE age + 1 IS NULL;
Se um índice é usado depende da estrutura da condição da consulta.
NULL e índices compostos
Mesmo ao usar índices compostos, colunas que contêm NULL recebem tratamento especial.
- Exemplo de um índice composto
CREATE TABLE employees ( id INT AUTO_INCREMENT PRIMARY KEY, department_id INT, salary INT, INDEX (department_id, salary) );
Se department_id for NULL, parte do índice composto (department_id, salary) pode não ser totalmente utilizada.
Impacto de desempenho do NULL
- Eficácia do índice
- Pesquisas que incluem condições NULL frequentemente ainda se beneficiam dos índices. No entanto, se a condição se tornar complexa, o uso do índice pode ser limitado.
- Grandes volumes de dados
- Se muitos valores NULL existirem em uma coluna indexada, o tamanho do índice pode aumentar e potencialmente reduzir o desempenho da consulta.
- Estratégias de design para evitar NULL excessivo
- Para colunas que frequentemente contêm NULL, definir um valor padrão para reduzir o uso de NULL pode melhorar o desempenho em alguns casos.
Dicas de otimização de desempenho
- Verificar uso de índice Use
EXPLAINpara verificar se um índice está sendo aplicado:EXPLAIN SELECT * FROM users WHERE age IS NULL;
- Projetar para minimizar NULL Aplique restrições
NOT NULLe valores padrão para evitar NULL em seu esquema:CREATE TABLE users ( id INT AUTO_INCREMENT PRIMARY KEY, age INT NOT NULL DEFAULT 0 );
- Reavaliar índices Dependendo do volume de dados e dos padrões de consulta, considere adicionar ou remover índices para otimizar o desempenho.
Resumo
NULL pode coexistir com índices, mas sob certas condições pode afetar o desempenho. Ao projetar estratégias de indexação adequadas e definir uma política clara para o uso de NULL, você pode alcançar operações de banco de dados eficientes.
6. NULL e Ordenação
Ao ordenar dados no MySQL, entender como o NULL é tratado é importante. Como o NULL se comporta de forma diferente dos valores normais, conhecer a ordem padrão de classificação e como personalizá‑la ajuda a obter os resultados desejados. Nesta seção, explicamos as regras básicas e técnicas avançadas para ordenação com NULL.
Ordem padrão de classificação de NULL
No MySQL, NULL é tratado da seguinte forma:
- Crescente (ASC) : valores NULL aparecem primeiro.
- Decrescente (DESC) : valores NULL aparecem por último.
Exemplo:
SELECT * FROM users ORDER BY age ASC;
-- NULL appears first
SELECT * FROM users ORDER BY age DESC;
-- NULL appears last
Controlando a posição de NULL explicitamente
Você pode sobrescrever o comportamento padrão de ordenação para forçar que valores NULL apareçam primeiro ou por último.
- Colocar valores NULL primeiro
SELECT * FROM users ORDER BY age IS NULL DESC, age ASC;
Nesta consulta, linhas onde age é NULL aparecem primeiro, seguidas por linhas não-NULL ordenadas em ordem crescente.
- Colocar valores NULL por último
SELECT * FROM users ORDER BY age IS NULL ASC, age ASC;
Aqui, valores não-NULL aparecem primeiro, e valores NULL são colocados ao final.
Ordenação por múltiplas colunas com NULL
Ao ordenar por múltiplas colunas, você pode especificar o tratamento de NULL por coluna.
- Exemplo com múltiplas condições
SELECT * FROM users ORDER BY department_id ASC, age IS NULL DESC, age ASC;
Esta consulta ordena os dados na seguinte ordem:
department_idem ordem crescente- Linhas onde
ageé NULL - Valores de
agenão-NULL em ordem crescente
Desempenho de ordenação e NULL
Ao ordenar em uma coluna que contém NULL, o uso de um índice depende da estrutura da consulta. Se o índice não for usado, a ordenação pode levar mais tempo.
- Verificar uso de índice
EXPLAIN SELECT * FROM users ORDER BY age ASC;
Use EXPLAIN para verificar se o índice está sendo aplicado.
Notas importantes ao ordenar
- Considere os tipos de dados das colunas
- Se uma coluna que contém NULL tem um tipo de dado inadequado, resultados inesperados podem ocorrer. Preste atenção especial às diferenças entre tipos numéricos e de string.
- Esclareça as condições de ordenação
- Para tornar os resultados da consulta explícitos, use
IS NULLouIS NOT NULLao lidar com NULL intencionalmente.SELECT * FROM users WHERE age IS NULL ORDER BY age DESC;
Resumo
Por padrão, NULL aparece primeiro em ordem crescente e por último em ordem decrescente. No entanto, você pode personalizar a consulta para controlar a posição dos valores NULL. Ao especificar condições apropriadas, você pode alcançar a ordem de classificação desejada. 
7. Funções úteis para manipular NULL
O MySQL fornece várias funções convenientes para manipular NULL de forma eficiente. Ao usar essas funções, você pode escrever consultas mais limpas e processar dados de forma mais eficaz quando valores NULL estão envolvidos. Nesta seção, explicamos as funções mais usadas e como utilizá‑las.
Função COALESCE
COALESCE retorna o primeiro valor não‑NULL dos argumentos especificados. É útil quando você deseja substituir NULL por um valor padrão.
- Sintaxe básica
COALESCE(value1, value2, ..., valueN)
- Exemplo
SELECT COALESCE(age, 0) AS adjusted_age FROM users;
Nesta consulta, se age for NULL, retorna 0; caso contrário, retorna o valor de age.
- Exemplo com múltiplos argumentos
SELECT COALESCE(NULL, NULL, 'Default Value', 'Other Value') AS result;
O resultado será “Default Value”.
Função IFNULL
IFNULL retorna um valor especificado se a expressão for NULL. É semelhante ao COALESCE, mas limitado a dois argumentos.
- Sintaxe básica
IFNULL(expression, alternate_value)
- Exemplo
SELECT IFNULL(age, 0) AS adjusted_age FROM users;
Se age for NULL, isso retorna 0.
- Diferença do COALESCE
- IFNULL aceita apenas dois argumentos, enquanto COALESCE pode aceitar múltiplos argumentos.
Operador de Igualdade Seguro para NULL (<=>)
O operador <=> permite a comparação segura de valores NULL. Usar este operador torna possível comparar valores NULL diretamente.
- Exemplo
SELECT * FROM users WHERE age <=> NULL;
Esta consulta recupera com precisão os registros onde age é NULL.
- Diferença do operador de igualdade normal (=)
- Com o operador
=,NULL = NULLretorna NULL, mas com<=>, ele retorna TRUE.
Função ISNULL
ISNULL verifica se um valor é NULL. Embora IS NULL e IS NOT NULL sejam geralmente suficientes, ISNULL é útil quando você precisa de uma verificação baseada em função.
- Sintaxe básica
ISNULL(expression)
- Exemplo
SELECT ISNULL(age) AS is_null FROM users;
Se age for NULL, ele retorna 1; caso contrário, retorna 0.
Função NULLIF
NULLIF retorna NULL se os dois argumentos forem iguais; caso contrário, retorna o primeiro argumento.
- Sintaxe básica
NULLIF(expression1, expression2)
- Exemplo
SELECT NULLIF(salary, 0) AS adjusted_salary FROM employees;
Se salary for 0, ele retorna NULL; caso contrário, retorna o valor de salary.
Como escolher a função NULL certa
- Para definir um valor padrão : Use COALESCE ou IFNULL
- Para comparar NULL de forma segura : Use o operador <=>
- Para verificar explicitamente NULL : Use ISNULL ou IS NULL
- Para retornar NULL sob condições específicas : Use NULLIF
Resumo
O MySQL fornece um conjunto rico de funções para lidar com NULL. Ao escolher a função apropriada, você pode escrever consultas mais simples e eficientes. Use essas funções para otimizar como sua aplicação lida com valores NULL.
8. Melhores Práticas para Lidar com NULL
NULL desempenha um papel importante nas operações de banco de dados, mas devido às suas características únicas, ele também pode causar confusão e problemas. Ao lidar com NULL corretamente, você pode manter a integridade dos dados e garantir uma operação eficiente. Nesta seção, explicamos as melhores práticas para trabalhar com NULL.
Lidando com NULL no design do banco de dados
- Decidindo se permitir NULL
- NULL representa “nenhum valor existe”, mas nem toda coluna deve permitir NULL.
Exemplos: wp:list /wp:list
- Campos obrigatórios (por exemplo, nome de usuário, endereço de e-mail) devem ter uma restrição
NOT NULL. - Campos que podem legitimamente não ter valor (por exemplo, pontuação intermediária, configurações opcionais) podem permitir NULL.
CREATE TABLE users ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(50) NOT NULL, email VARCHAR(100) NOT NULL, age INT NULL );
- Campos obrigatórios (por exemplo, nome de usuário, endereço de e-mail) devem ter uma restrição
- Definindo valores padrão
- Para minimizar o uso de NULL, defina valores padrão apropriados onde possível.
CREATE TABLE orders ( id INT AUTO_INCREMENT PRIMARY KEY, status VARCHAR(20) NOT NULL DEFAULT 'pending' );
Gerenciando NULL na camada de aplicação
- Validar dados de entrada
- Quando os usuários enviam dados por meio de formulários, verifique se os campos obrigatórios estão preenchidos.
- Adicione validação no lado do servidor para evitar que valores NULL indesejados sejam inseridos no banco de dados.
- Padronizar o tratamento de NULL
- Garanta um tratamento consistente de NULL em todo o código da aplicação.
- Exemplo: Forneça uma função auxiliar para converter NULL em um valor padrão.
def handle_null(value, default): return value if value is not None else default
Considerações importantes ao escrever consultas
- Comparações seguras com NULL
- Sempre use
IS NULLouIS NOT NULLao comparar NULL.SELECT * FROM users WHERE age IS NULL;
- Manipulando NULL em condições complexas
- Ao escrever consultas com múltiplas condições, contabilize explicitamente o NULL.
SELECT * FROM users WHERE age > 20 OR age IS NULL;
- Considerando NULL em resultados agregados
- Funções agregadas (SUM, AVG, etc.) ignoram valores NULL. Se precisar verificar quantos valores NULL existem, adicione condições explícitas.
SELECT COUNT(*) AS total_records, COUNT(age) AS non_null_records FROM users;
Melhorando desempenho e legibilidade
- Índices e NULL
- Se usar índices em colunas que contêm muitos valores NULL, verifique a eficiência do índice.
- Reconstrua ou ajuste os índices quando necessário.
- Minimizando NULL
- Reduzir o uso desnecessário de NULL durante a fase de design melhora a legibilidade e o desempenho do banco de dados.
- Use valores padrão ou flags em vez de depender excessivamente de NULL.
CREATE TABLE users ( id INT AUTO_INCREMENT PRIMARY KEY, age INT NOT NULL DEFAULT 0 );
Problemas reais comuns e soluções
- Problema: Resultados de busca inesperados devido a NULL
- Solução: Use corretamente
IS NULLouIS NOT NULLnas consultas.SELECT * FROM users WHERE name = 'Taro' OR name IS NULL;
- Problema: Comportamento inesperado em funções agregadas
- Solução: Adicione condições para excluir ou tratar explicitamente o NULL.
SELECT COUNT(age) FROM users WHERE age IS NOT NULL;
- Problema: NULL e integridade dos dados
- Solução: Imponha restrições
NOT NULLno nível do banco de dados e valide a entrada no nível da aplicação.
Resumo
NULL é um conceito poderoso, mas se não for tratado adequadamente, pode gerar problemas. Definindo uma política clara durante o design do banco de dados e mantendo um tratamento consistente na sua aplicação, você pode minimizar questões relacionadas a NULL.
9. Perguntas Frequentes (FAQ)
Ao aprender sobre NULL no MySQL, tanto iniciantes quanto usuários intermediários costumam ter dúvidas semelhantes. Nesta seção, resumimos as perguntas frequentes e suas respostas sobre NULL.
Q1: Qual a diferença entre NULL, uma string vazia (“”) e zero (0)?
- A1:
- NULL: Indica que nenhum valor existe (indefinido).
- String vazia (“”): Um valor existe, mas seu conteúdo está vazio.
- Zero (0): Um valor existe, e seu valor numérico é 0.
- Exemplo:
INSERT INTO users (name, age) VALUES ('Taro', NULL); -- age is NULL INSERT INTO users (name, age) VALUES ('Hanako', ''); -- age is an empty string INSERT INTO users (name, age) VALUES ('Jiro', 0); -- age is zero
Q2: Por que NULL = NULL não retorna TRUE?
- A2:
- De acordo com as especificações SQL, NULL representa um “valor desconhecido”. Comparar valores desconhecidos resulta em um resultado indefinido (NULL), não TRUE ou FALSE.
- Ao comparar NULL, você deve usar
IS NULLouIS NOT NULL. - Exemplo:
SELECT NULL = NULL; -- Result: NULL SELECT NULL IS NULL; -- Result: TRUE
Q3: O que devo ter cuidado ao buscar dados que incluem NULL?
- A3:
- Se usar operadores de comparação (=, <, >, etc.) com NULL, não obterá os resultados esperados. Use
IS NULLouIS NOT NULLem vez disso. - Exemplo:
SELECT * FROM users WHERE age = NULL; -- Incorrect SELECT * FROM users WHERE age IS NULL; -- Correct
Q4: Existem considerações sobre NULL e índices?
- A4:
- Você pode criar índices em colunas que contêm NULL, mas a eficiência do índice depende das condições da consulta.
- Em particular, condições complexas (por exemplo, que incluam cálculos) podem impedir o uso do índice.
- Como verificar o uso do índice:
EXPLAIN SELECT * FROM users WHERE age IS NULL;
Q5: Qual a diferença entre COALESCE e IFNULL?
- A5:
- COALESCE : Aceita múltiplos argumentos e retorna o primeiro valor não-NULL.
- IFNULL : Aceita dois argumentos e retorna o segundo se o primeiro for NULL.
- Exemplo:
SELECT COALESCE(NULL, NULL, 'Default Value', 'Other Value'); -- Result: 'Default Value' SELECT IFNULL(NULL, 'Default'); -- Result: 'Default'
Q6: Como posso projetar meu banco de dados para evitar NULL?
- A6:
- NOT NULL constraints : Adicione restrições aos campos obrigatórios para impedir NULL.
- Default values : Use valores padrão em vez de NULL quando apropriado.
- Exemplo:
CREATE TABLE users ( id INT AUTO_INCREMENT PRIMARY KEY, age INT NOT NULL DEFAULT 0 );
Q7: As funções agregadas se comportam de forma diferente com NULL?
- A7:
- Funções agregadas (SUM, AVG, COUNT, etc.) ignoram valores NULL. No entanto, se você quiser verificar quantos valores NULL existem, é necessário adicionar condições explícitas.
- Exemplo:
SELECT COUNT(*) AS total_records, COUNT(age) AS non_null_ages FROM users;
Q8: O NULL pode causar problemas em operações JOIN?
- A8:
- Ao executar operações JOIN em colunas que contêm NULL, os valores NULL são tratados como não correspondentes. Como resultado, você pode não obter os resultados esperados.
- Solução: Escreva consultas que considerem explicitamente o NULL ou use a função COALESCE para substituir o NULL por um valor padrão.
SELECT * FROM table1 t1 LEFT JOIN table2 t2 ON COALESCE(t1.key, 0) = COALESCE(t2.key, 0);
Resumo
NULL é um valor que requer tratamento especial nas operações de banco de dados MySQL. Use esta seção de FAQ como referência para aprofundar seu entendimento sobre NULL e aprender a manipulá-lo de forma eficaz.
10. Conclusão
Entender como lidar com NULL no MySQL é uma habilidade essencial no design e nas operações de banco de dados. Neste artigo, cobrimos tudo, desde a definição básica de NULL até métodos de manipulação, busca, ordenação, indexação, funções úteis e boas práticas.
Principais Pontos
- Fundamentos e características do NULL
- NULL representa “nenhum valor existe” ou um “valor desconhecido”, e é diferente de uma string vazia (“”) ou zero (0).
- Use
IS NULLeIS NOT NULLpara comparações seguras envolvendo NULL.
- Trabalhando e pesquisando dados NULL
- Você aprendeu como inserir, atualizar, excluir e pesquisar dados que incluem NULL corretamente.
- Usar sintaxe e funções como
IS NULLeCOALESCEpermite operações flexíveis e eficientes.
- NULL e desempenho
- Discutimos o impacto dos índices em colunas que contêm NULL e estratégias de design para otimizar o desempenho.
- Definir valores padrão quando apropriado pode ajudar a minimizar o uso excessivo de NULL.
- Funções convenientes de NULL
- Funções como COALESCE, IFNULL e NULLIF ajudam a resolver problemas comuns relacionados a NULL.
- Use o operador
<=>para comparações seguras e evitar comportamentos indesejados.
- Melhores práticas
- Minimize o uso desnecessário de NULL no design do banco de dados e aplique validação adequada na camada de aplicação para manter a integridade dos dados.
- Padronizar o tratamento de NULL nas consultas SQL melhora a legibilidade e a manutenção.
Benefícios de entender o NULL
- Operações de dados eficientes : O tratamento correto de NULL previne erros desnecessários e permite a escrita eficiente de consultas.
- Integridade de dados aprimorada : Definir uma política clara para o uso de NULL durante o design do banco de dados leva a uma gestão de dados mais consistente.
- Maior confiabilidade da aplicação : Lidar adequadamente com NULL na camada de aplicação previne comportamentos inesperados e bugs.
Próximos passos
Para aprofundar seu entendimento sobre NULL, considere o seguinte:
- Revise como o NULL é usado em seus projetos atuais e identifique áreas para melhoria.
- Experimente funções e operadores como
IS NULL,COALESCEeIFNULLusando conjuntos de dados reais. - Ajuste ainda mais os índices e estratégias de desempenho com base na sua carga de trabalho.
Ao estudar este artigo, você agora deve ter uma compreensão sólida de como o NULL funciona no MySQL e de como lidar com ele na prática. Use esse conhecimento para melhorar suas operações de banco de dados e fluxos de trabalho de desenvolvimento de aplicações.


