The if update(column_name) clause is true for an insert statement whenever the column is assigned a value in the select list or in the values clause. An explicit null or a default assigns a value to a column, and thus activates the trigger. An implicit null does not.
For example, suppose you create the following table:
create table junk (a int null, b int not null)
and then write the following trigger:
create trigger junktrig 
on junk 
for insert 
as 
if update(a) and update(b) 
        print "FIRING" 
    /*"if update" is true for both columns.
      The trigger is activated.*/ 
insert junk (a, b) values (1, 2)
    /*"if update" is true for both columns.
      The trigger is activated.*/
insert junk values (1, 2)
    /*Explicit NULL: 
      "if update" is true for both columns. 
      The trigger is activated.*/
insert junk values (NULL, 2) 
    /* If default exists on column a,   
      "if update" is true for either column.   
      The trigger is activated.*/ 
insert junk (b) values (2)
    /* If no default exists on column a,   
      "if update" is not true for column a.   
      The trigger is not activated.*/ 
insert junk (b) values (2)
The same results would be produced using only the clause:
if update(a)
To create a trigger that disallows the insertion of implicit nulls, you can use:
if update(a) or update(b)
SQL statements in the trigger can then test to see if a or b is null.