いろんなRDBMSで一意制約(ユニークキー)

ユニークキーってRDBMSによって挙動(というか仕様?)がちがうんです。

create table hoge(aaa int not null primary key, bbb int unique); -- (1)
insert into hoge values(1, null);                       -- (2)
insert into hoge values(2, null);                       -- (3)

これを各RDBMSで実行するとどうなるか?

DB2 9.5

(1)でエラーになります。
DB2ではユニークキーをつけるカラムにはNOT NULL制約が必須なんです。

SQL Server 2005

(3)でエラーになります。
(2)ですでにNULLが入っているから一意制約違反になっちゃうのです。

Oracle Databae 10.2、MySQL 5.0、PostgerSQL 8.2.4

テーブル作成と2件のINSERTに成功します。

SQL Server 2005はパラメータの設定で挙動を変更できたかも。うろ覚え。
いずれにしても、複数DB対応のアプリをつくるときとかは気をつけたいですね。