Вместо того, чтобы использовать оператор CASE в JOIN, что предотвратит запрос с использованием индексов, вы можете рассмотреть возможность использования UNION
SELECT [dbo].tableB.theColumnINeed
FROM [dbo].tableA
LEFT OUTER JOIN [dbo].tableB
ON [dbo].tableA.myDateColumn > '1/1/2009'
AND [dbo].tableA.myColumn = FormatColumnOneWay([dbo].tableB.myColumn)
UNION ALL
SELECT [dbo].tableB.theColumnINeed
FROM [dbo].tableA
LEFT OUTER JOIN [dbo].tableB
ON [dbo].tableA.myDateColumn <= '1/1/2009'
AND [dbo].tableA.myColumn = FormatColumnAnotherWay([dbo].tableB.myColumn)
но если FormatColumnOneWay / FormatColumnAnotherWay являются функциями или выражениями полей, это, вероятно, исключит использование индексных индексов в [myColumn], хотя любой индекс в myDateColumn все равно следует использовать
Тем не менее, это может помочь понять, что такое логика FormatColumnOneWay / FormatColumnAnotherWay, а также знание, которое может обеспечить лучшую оптимизацию
Несколько вещей на заметку:
UNION ALL не удаляет дубликаты (в отличие от UNION). Поскольку два подзапроса являются взаимоисключающими, это нормально и сохраняет шаг SORT, который UNION сделает для удаления дубликатов.
Вы не должны использовать стиль '01.01.2009' для строковых дат, вы должны использовать стиль 'yyyymmdd' без косых черт или дефисов (вы также можете использовать CONVERT с параметром, чтобы явно указать, что строка находится в d / m / y или m / d / y style