Como todos sabem, as funções de agrupamento não levam em consideração os atributos que estão com valor NULL nas linhas. Assim fizemos um teste para comprovar a atuação do count(*). O resultado era esperado que quando utilizassemos a função de agrupamento count(*) ele entao iria verificar que a linha estava nula e nao contabilizasse essa linha. Mas o Oracle armazena duas pseudo colunas que são: ROWID e ROWNUM, e quando executo count(*) estas colunas sao contempladas para efeito de calculo e o retorno de total de linhas inseridas com valor nulo é retornado.

SQL> create table TOTO (CODIGO NUMBER);

Tabela criada.

SQL> insert into TOTO VALUES(NULL);

1 linha criada.

SQL> /

1 linha criada.

SQL> /

1 linha criada.

SQL> /

1 linha criada.

SQL> /

1 linha criada.

SQL> select * from toto;

CODIGO
———-

SQL> select count(*) from toto;

COUNT(*)
———-
5

SQL>
SQL> select count(codigo) from toto;

COUNT(CODIGO)
————-
0

SQL> select rowid, rownum, codigo from toto;

ROWID ROWNUM CODIGO
—————— ———- ———-
AAAMrXAABAAAOpaAAA 1
AAAMrXAABAAAOpaAAB 2
AAAMrXAABAAAOpaAAC 3
AAAMrXAABAAAOpaAAD 4
AAAMrXAABAAAOpaAAE 5

SQL>