Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Mistério do MySQL:o valor nulo não é diferente da string não nula


Exatamente. NULL representa um valor desconhecido, não um valor específico (não é o mesmo que NULL em C, ou nil em Ruby, etc.) Em SQL, se você comparar algo com o valor desconhecido, o resultado também será desconhecido. E você não obterá as linhas onde WHERE condição é desconhecida.

Tente isto:
SELECT NULL <> 2;

e você verá NULL como resultado.

Tente isto:
SELECT * FROM t WHERE NULL;

e nenhuma linha sairá, mesmo se a tabela t é enorme.

Se você realmente precisa do que disse que queria (e eu não estou defendendo isso), você pode fazer algo assim:
SELECT T.f1, T.f2
FROM (SELECT NULL f1, 'a' f2) T
WHERE ((T.f1 IS NULL OR T.f2 IS NULL)
    AND (T.f1 IS NOT NULL OR T.f2 IS NOT NULL))
    OR T.f1 <> T.f2