Вы хотите убедиться, что хотя бы одна из таблиц использует свой фактический тип данных для идентификаторов и что она может использовать поиск по индексу, если это возможно. Это зависит от избирательности вашего запроса и частоты совпадений, чтобы определить, какой из них следует преобразовать в другой. Если вы знаете, что вам нужно сканировать всю первую таблицу, то вы все равно не сможете использовать поиск, и вам следует преобразовать этот идентификатор в тип данных другой таблицы.
Чтобы убедиться, что вы можете использовать индексы, также избегайте LIKE. Например, гораздо лучше иметь:
WHERE
T1.ID = CAST(T2.ID AS VARCHAR) OR
T1.ID = RIGHT('0000000000' + CAST(T2.ID AS VARCHAR), 10)
чем:
WHERE
T1.ID LIKE '%' + CAST(T2.ID AS VARCHAR)
Как отметил Стивен А. Лоу, второй запрос также может быть неточным.
Если вы собираетесь использовать все строки из T1, хотя (другими словами, ЛЕВОЕ ВНЕШНЕЕ СОЕДИНЕНИЕ к T2), то вам может быть лучше:
WHERE
CAST(T1.ID AS INT) = T2.ID
Составьте несколько планов запросов для каждого метода, если вы не уверены, и посмотрите, что работает лучше.
Абсолютно лучший путь - это то, что предложили другие, и измените тип данных таблиц, чтобы он соответствовал, если это вообще возможно. Даже если вы не можете сделать это до завершения этого проекта, включите его в свой список дел на ближайшее будущее.