On top of that throw in that, the DDL and the DML have different rules. In DML, the {false, unknown} values are treated the same and reject a search condition. In the DDL, {true, unknown} values are treated the same and accept a check condition.
I look at it this way:
WHERE conditions must be TRUE in order to SELECT a row. This makes perfect sense. You wouldn't want to see rows that weren't known to meet the specific condition(s).
CHECK conditions must be known to violate the specified condition(s) in order to fail. This also makes sense. You wouldn't necessarily want to reject rows that you didn't know for sure required rejecting.
One could consider that inconsistent, but I don't think it's a bad set of rules.
SQL DBA,SQL Server MVP(07, 08, 09) "Money can't buy you happiness." Maybe so, but it can make your unhappiness a LOT more comfortable!