Registros com valor nulo geralmente indicam ausência de valores ou que os valores serão informados futuramente.
Neste artigo mostraremos uma série de consultas SQL e o resultado obtido quando tuplas contém valores nulo.
Para nossos exemplos segue nosso esquema:
SQL> desc dept
Nome Nulo? Tipo
------------------------------------
DEPT_NO NUMBER(38)
NOME VARCHAR2(20)
SQL> desc func
Nome Nulo? Tipo
-------------------------------------------
FUNC_NO NUMBER(38)
NOME VARCHAR2(20)
DEPTNO NUMBER(38)
SAL NUMBER(12,2)
SQL> select * from dept;
DEPT_NO NOME
---------- --------------------
1 RH
2 COMERCIAL
3 INFORMATICA
SQL> select * from func;
FUNC_NO NOME DEPTNO SAL
---------- -------------------- ---------- ----------
1 JOAO 1 1000
2 MARIA 2 1000
3 ZE
4 LEO 3 1000
NULLS em expressões escalares
Como sabemos, qualquer expressão escalar envolvendo nulo retorna null como resultado. A query a seguir exemplifica o que ocorre ao realizar um aumento de salário de R$ 100,00 para todos os funcionários:
SQL> select func_no, nome, deptno, sal+100 from func;
FUNC_NO NOME DEPTNO SAL+100
---------- -------------------- ---------- ----------
1 JOAO 1 1100
2 MARIA 2 1100
3 ZE
4 LEO 3 1100
Conclusão: O servidor do banco de dados não pode somar 100 reais a null e por isso o resultado é nulo. Se quisermos realizar está consulta e aparecer um valor de salário para todos os funcionários podemos utilizar a função Ansi coalesce, que substitui o null por zero antes de realizar o cálculo matemático. Claro que, utilizar coalesce vai depender muito da regra de negócio em questão, pois você certamente não vai querer sair colocando coalesce em tudo que é SQL. Talvez uma solução mais correta neste exemplo é alterar o esquema da tabela func para não permitir nulo no salário, forçando assim ter um salário válido.
A query a seguir repete a mesma consulta, mas usando a função Ansi Coalesce:
SQL> select func_no, nome, deptno, coalesce(sal,0)+100 from func;
FUNC_NO NOME DEPTNO COALESCE(SAL,0)+100
---------- -------------------- ---------- -------------------
1 JOAO 1 1100
2 MARIA 2 1100
3 ZE 100
4 LEO 3 1100
Neste exemplo, o servidor do banco de dados fez o que queríamos. Usar a função coalesce é muito importante para evitar erros nas consultas SQL. O Oracle ainda possui várias outras funções para lidar com null: nvl, nvl2, nullif. Vale a pena dar uma olhada nestas funções. Existe também a expressão case que pode ser muito útil também.