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
MySQL 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. See Secção 6.4.8, “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 MySQL 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.
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.