• LEN() strips trailing pad characters (normally spaces, but could vary depending on collation) and DATALENGTH() does not.

    '' isn't the same thing as NULL.  To solve your problem, you might check into NULLIF(), or force a NULL value via an UPDATE statement.  For example, NULLIF('', '') returns NULL.

    P.S., you could also create a TRIGGER to force the value to NULL if it is '' at insert or update time.