Problemas com Valores NULL


O conceito do valor NULL é uma fonte comum de confusão para os iniciantes em SQL, que frequentemente pensa que NULL é a mesma coisa que uma string vazia ''. Este não é o caso! Por exemplo, as seguintes intruções são completamente diferentes:

mysql> INSERT INTO minha_tabela (telefone) VALUES (NULL);
mysql> INSERT INTO minha_tabela (telefone) VALUES ('');

Ambas as intruções inserem um valor na coluna telefone, mas a primeira insere um valor NULL e a segunda insere uma string vazia. O significado do primeiro pode ser considerado como telefone não é conhecido e o significado da segunda pode ser considerado como ela não tem telefone.

Em SQL, o valor NULL é sempre falso em coparação a qualquer outro valor, mesmo NULL. Uma expressão que contém NULL sempre produz um valor NULL a menos que seja indicado na documentação para os operadores e funções involvidos na expressão. Todas as colunas no seguinte exemplo retornam NULL:

mysql> SELECT NULL,1+NULL,CONCAT('Invisible',NULL);

Se você quiser procurar por uma coluna cujo valor é NULL, você nãp pode usar o teste =NULL. A seguinte instrução não retorna nenhuma linha, pois expr = NULL é FALSO, para qualquer expressão:

mysql> SELECT * FROM minha_tabala WHERE phone = NULL;

Para procurar por valores NULL, você deve usar o teste IS NULL. A seguir mostramos como encontrar o némuro de telefone NULL e o número de telefone vazio:

mysql> SELECT * FROM minha_tabela WHERE telefone IS NULL;
mysql> SELECT * FROM minha_tabela WHERE telefone = '';

Note que você pode adicionar um índice a uma coluna que tenha valores NULL apenas se você estiver usando o MariaDB versão 3.23.2 ou mais novo e estiver usando tipos de tabelas NyISAM, InnoDB ou BDB. Em versões anteriores e com outros tipos de tabelas, você deve declara tais colunas como NOT NULL. Isto também significa que você então não poderá inserir NULL em uma coluna indexada.

Ao ler dados com LOAD DATA INFILE, colunas vazias são atualizadas com ''. Se você quiser um valor NULL em uma coluna, você deve usar \N no arquivo texto. A palavra literal 'NULL' também pode ser usada em algumas circunstâncias. Leia "Sintaxe LOAD DATA INFILE".

Ao usar ORDER BY, valores NULL são apresentados primeiro, ou por último se você especificar DESC para armazenar em ordem decrescente. Exceção: Nos MariaDB 4.0.2 até 4.0.10, se você armazenar em ordem decrescente usando DESC, valores NULL são apresentados por último.

Ao usar GROUP BY, todos os valores NULL são considerados iguais.

Funções de agrupamento (resumo) como COUNT(), MIN() e SUM() ignoram valores NULL. A exceção a isto é COUNT(*), que conta linhas e não colunas individuais. Por exemplo, a seguinte instrução deve produzir duas contagens. A primeira é a contagem do número de linhas na tabela e a segunda é a contagem do número de valores diferentes de NULL na coluna age:

mysql> SELECT COUNT(*), COUNT(age) FROM person;

Para ajudar com o tratamento de NULL, você pode usar os operadores IS NULL e IS NOT NULL e a função IFNULL().

Para alguns tipos de colunas, valores NULL são tratados de forma especial, Se você inserir NULL na primeira coluna TIMESTAMP de uma tabela, a data e hora atual serão inseridos. Se você isere NULL em uma coluna AUTO_INCREMENT, o próximo número na sequência é inserida.

Retornar