INSERT inside PL/pgSQL function gives different result
Merlin Moncure from the PostgreSQL General mailing list has an answer:


  The SQL standard mandates that rows containing all null
  values satisfy 'IS NULL = true'.  However, postgres internally has
  nullibitily of container types that is distinct from their contents.
  I personally find this to be a good thing for various reasons but the
  facts are that postgres has some historical baggage in this area that
  crashed into the standard.