• BOL says:

    "When a row is modified through a view, the WITH CHECK OPTION makes sure the data remains visible through the view after the modification is committed."

    and

    "CHECK constraints reject values that evaluate to FALSE. Because null values evaluate to UNKNOWN, their presence in expressions may override a constraint."

    That explains it - although in both cases there is the same word - CHECK - the action performed is different in each case.

    WITH CHECK OPTION works the same as if you write a query : SELECT * FROM mytable WHERE col1 > 10 selects rows where (col1 > 10) evaluates to TRUE, meaning it will not return rows where col1 is NULL, therefore you will not be allowed to enter NULL value into the view. You are allowed to enter rows where CHECK evaluates to TRUE.

    CHECK constraint prevents entering rows where constraint evaluates to FALSE.

    Any expression can evaluate to TRUE, FALSE or UNKNOWN. Result of this is that "allow if TRUE" and "not allow if FALSE" is not the same. If the expression results in NULL, it is neither TRUE nor FALSE, and so a check working with "allow if TRUE" fails, while check working with "not allow if FALSE" succeeds (allows data to be entered).