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>
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>
Comentários