Věřím, že odpověď je, že Oracle je velmi, velmi starý.
V dávných dobách, než existoval standard SQL, učinil Oracle návrhové rozhodnutí, že vyprázdní řetězce v VARCHAR
/VARCHAR2
sloupce byly NULL
a že existoval pouze jeden smysl NULL (existují relační teoretici, kteří by rozlišovali mezi daty, která nikdy nebyla vyzvána, daty, kde odpověď existuje, ale uživatel ji nezná, daty, kde odpověď neexistuje atd. které představují určitý smysl NULL
).
V době, kdy se objevil standard SQL a souhlasil s tím, že NULL
a prázdný řetězec byly odlišné entity, již existovali uživatelé Oracle, kteří měli kód, který předpokládal, že jsou tyto dvě ekvivalentní. Oracle tak v podstatě zbyly možnosti prolomit stávající kód, porušit standard SQL nebo zavést jakýsi inicializační parametr, který by změnil funkčnost potenciálně velkého množství dotazů. Porušení standardu SQL (IMHO) bylo z těchto tří možností nejméně rušivé.
Oracle nechal otevřenou možnost, že VARCHAR
datový typ by se v budoucí verzi změnil, aby odpovídal standardu SQL (proto všichni používají VARCHAR2
v Oracle, protože je zaručeno, že chování tohoto datového typu zůstane do budoucna stejné).