title: CONVERT on only NOT NULL records
body: <p>I am working in SQL Server 2008.  I have a table with two columns that store date values, but the columns themselves are varchar.  (I know, this is bad practice, but I don't own the table.)  Some of the records in these two columns are NULL.  I am trying to do a comparison of the two columns against each other.  So, to enable the comparison, I need to do a CONVERT.  But, CONVERT fails when it encounters NULLs.  How do I essentially prevent the CONVERT from happening when it encounters a NULL?  My core query is as follows:</p>
  
  <pre><code>SELECT
  col1
  FROM table_a
  WHERE
  CONVERT(date, col2, 101) &gt; CONVERT(date, col3, 101)
  </code></pre>
  
  <p>I tried an inner query with an IN clause (i.e., the inner query returns only non-NULL records), but this failed because it seems that the query optimizer runs both queries independently, i.e., it runs the CONVERT on all records, which causes the failure.  I also tried a self join (i.e., return only records in the first instance of the table where the records aren't null in the second instance of the table).  But, this failed as well because of the same problem in the inner query scenario.</p>