Acredito que a resposta é que a Oracle é muito, muito antiga.
Antigamente, antes de haver um padrão SQL, a Oracle tomou a decisão de design que esvaziava as strings em
VARCHAR
/VARCHAR2
colunas eram NULL
e que havia apenas um sentido de NULL (há teóricos relacionais que diferenciam entre dados que nunca foram solicitados, dados em que a resposta existe, mas não é conhecida pelo usuário, dados em que não há resposta etc. que constituem algum sentido de NULL
). Quando o padrão SQL surgiu e concordou que
NULL
e a string vazia eram entidades distintas, já existiam usuários Oracle que tinham código que assumia que as duas eram equivalentes. Assim, a Oracle ficou basicamente com as opções de quebrar o código existente, violar o padrão SQL ou introduzir algum tipo de parâmetro de inicialização que alteraria a funcionalidade de um número potencialmente grande de consultas. A violação do padrão SQL (IMHO) foi a menos disruptiva dessas três opções. A Oracle deixou em aberto a possibilidade de que o
VARCHAR
tipo de dados mudaria em uma versão futura para aderir ao padrão SQL (e é por isso que todos usam VARCHAR2
no Oracle desde que o comportamento desse tipo de dados permaneça o mesmo daqui para frente).