Определение ограничения NULL-значений
Спецификация

См. спецификацию пункта «Создание таблицы».

Синтаксические правила
  1. Если < ограничение NULL-значений > явно не указано, по умолчанию используется NULL.

  2. Если задана конструкция < имя столбца > NULL, то для того же столбца нельзя задать NOT NULL или PRIMARY KEY.

  3. Если NOT NULL не указан и не задано < значение по умолчанию >, то подразумевается DEFAULT NULL.

  4. Разрешено сочетание описателей NOT NULL и DEFAULT NULL для столбца. В этом случае используется NOT NULL, а DEFAULT NULL игнорируется.

    create table tab1 (i int unique default null not null);
Общие правила
  1. Атрибут столбца NULL разрешает, NOT NULL запрещает присваивать значению столбца NULL-значения. По умолчанию используется NULL.

    create or replace table test (col1 int not null);
    insert into test(col1) values (100);
    insert into test(col1) values (null); /*ошибка */
    insert into test; /* ошибка */
  2. Атрибут NULL устанавливает значение по умолчанию для столбцов, значение которых не определено в операции добавления (модификации) записи и для которых не задана опция < подставляемое значение >.

    create or replace table test (col1 int null);
    insert into test(col1) values (100);
    insert into test(col1) values (null);
    insert into test;
    
    select NVL(col1,-1) from test;
    |        100|
    |         -1|
    |         -1|
  3. Если для столбца заданы одновременно < ограничение NULL-значений > и < значение по умолчанию >, то приоритет имеет опция < ограничение NULL-значений >.

    Например, в случаях

    create or replace table test (col1 int not null default null );
    
    create or replace table test (col1 int default null not null);

    будет применяться правило not null.

  4. < Подставляемое значение столбца > не должно конфликтовать с < ограничением NULL-значений >.

    create or replace table test (col1 int null, col2  int  generated always as (col1+500) not null);
    
    insert into test(col1)  values (100);
    insert into test(col1)  values (null);/ ошибка
    insert into test; /ошибка
    select * from test