Parte da sua consulta inicial é a seguinte.
FROM [dbo].[calendar] a
LEFT JOIN [dbo].[colleagueList] b
ON b.[Date] = a.d
WHERE DAY(a.[d]) = 1
AND a.[d] BETWEEN @dateStart AND COALESCE(@dateEnd,@dateStart)
Essa seção do plano é mostrada abaixo

Sua consulta revisada BETWEEN @dateStart AND ISNULL(@dateEnd,@dateStart)tem isso para a mesma associação

A diferença parece ser que ISNULLsimplifica ainda mais e, como resultado, você obtém estatísticas de cardinalidade mais precisas na próxima associação. Esta é uma função com valor de tabela embutida e você a está chamando com valores literais para que ela possa fazer algo parecido.
a.[d] BETWEEN @dateStart AND ISNULL(@dateEnd,@dateStart)
a.[d] BETWEEN '2013-06-01' AND ISNULL(NULL,'2013-06-01')
a.[d] BETWEEN '2013-06-01' AND '2013-06-01'
a.[d] = '2013-06-01'
E como há um predicado de equi join, b.[Date] = a.do plano também mostra um predicado de igualdade b.[Date] = '2013-06-01'. Como resultado, a estimativa de cardinalidade das 28,393linhas provavelmente será bastante precisa.
Para a versão CASE/ COALESCEquando @dateStarte @dateEndtem o mesmo valor, simplifica OK para a mesma expressão de igualdade e fornece o mesmo plano, mas quando @dateStart = '2013-06-01'e @dateEnd IS NULLsó vai até
a.[d]>='2013-06-01' AND a.[Date]<=CASE WHEN (1) THEN '2013-06-01' ELSE NULL END
que também se aplica como predicado implícito em ColleagueList. O número estimado de linhas dessa vez é de 79.8linhas.
A próxima junção é:
LEFT JOIN colleagueTime
ON colleagueTime.TC_DATE = colleagueList.Date
AND colleagueTime.ASSOC_ID = CAST(colleagueList.ID AS VARCHAR(10))
colleagueTimeé uma 3,249,590tabela de linhas que é (novamente) aparentemente uma pilha sem índices úteis.
Essa discrepância nas estimativas afeta a escolha de junção usada. O ISNULLplano escolhe uma junção de hash que apenas varre a tabela uma vez. O COALESCEplano escolhe uma junção de loops aninhados e estima que ainda será necessário varrer a tabela uma vez e poder colocar o resultado em spool e reproduzi-lo 78 vezes. isto é, estima que os parâmetros correlacionados não serão alterados.
Pelo fato de o plano de loops aninhados ainda estar em andamento após duas horas, é colleagueTimeprovável que essa suposição de uma única varredura seja altamente imprecisa.
Quanto ao motivo pelo qual o número estimado de linhas entre as duas junções é muito menor, não tenho certeza sem poder ver as estatísticas nas tabelas. A única maneira de conseguir distorcer as contagens estimadas de linhas que muito em meus testes foi adicionar uma carga de NULLlinhas (isso reduziu a contagem estimada de linhas, mesmo que o número real de linhas retornadas permanecesse o mesmo).
A contagem estimada de linhas no COALESCEplano com meus dados de teste foi da ordem de
number of rows matching >= condition * 30% * (proportion of rows in the table not null)
Ou no SQL
SELECT 1E0 * COUNT([Date]) / COUNT(*) * ( COUNT(CASE
WHEN [Date] >= '2013-06-01' THEN 1
END) * 0.30 )
FROM [dbo].[colleagueList]
mas isso não corresponde ao seu comentário de que a coluna não tem NULLvalores.