Nej, Oracles behandling af nuller er idiosynkratisk, forskellig fra alle andres og ikke i overensstemmelse med ANSI-standarderne. Til Oracles forsvar har det sandsynligvis løst og var forpligtet til denne behandling længe før der var en ANSI-standard at være i overensstemmelse med!
Det hele starter fra det faktum, at Oracle gemmer strenge med et tegnantal efterfulgt af strengdataene. En NULL er repræsenteret af et tegnantal på nul uden følgende strengdata - hvilket er nøjagtigt det samme som en tom streng (''). Oracle har simpelthen ikke en måde at skelne dem på.
Dette fører til noget skæv adfærd, såsom dette sammenkædningstilfælde. Oracle har også en funktion LENGTH til at returnere længden af en streng, men denne er blevet defineret på en modsat måde, så LENGTH('') returnerer NULL ikke nul. Så:
LENGTH('abc') + LENGTH('') IS NULL
LENGTH('abc' || '') = 3
hvilket forekommer mig at overtræde grundlæggende matematiske principper.
Selvfølgelig bliver Oracle-udviklere så vant til dette, at mange af os ikke engang kan se noget forkert eller mærkeligt ved det - nogle vil faktisk hævde, at resten af verden er forkert, og at en tom streng og en NULL er det samme!