¿Por qué IsNull es dos veces más lento que la fusión (misma consulta)?

Encontramos una situación extraña en SQL Server 2008 (SP1) - 10.0.2531.0 (X64) - Win2008 SP2 (X64).

Aquí hay una consulta pesada:

select t1.id, t2.id 
from t1, t2
where 
     t1.id = t2.ext_id
     and isnull(t1.vchCol1, 'Null') = isnull(t2.vchCol1, 'Null')
     and isnull(t1.vchCol2, 'Null') = isnull(t2.vchCol2, 'Null')
     .... and about 10 more comparisons with Isnull

UPD: Todas las columnas en comparación (excepto ID) sonvarchar (~ 30 ... 200)
T1 es ~ 130mln filas, T2 es ~ 300k filas.

Esta consulta en un servidor Dev bastante grande se ejecuta ~ 5 horas - esto es lento, pero ¿qué podemos hacer?

Y mientras investigamos posibles formas de optimización, descubrimos que cambiar"es nulo" a"juntarse" en la consulta anterior proporciona una ganancia de rendimiento doble, y la consulta ahora se ejecuta para ~ 2 horas

UPD: Cuando eliminamos todoISNULL comprueba y usa solot1.vchCol1 = t2.vchCol1 la consulta finaliza después de 40mins.

La pregunta e: ¿Es este comportamiento conocido y deberíamosevita utilizandoEs nul ¿en todos lados

Respuestas a la pregunta(4)

Su respuesta a la pregunta