Cláusula WHERE-CASE Subquery Performance

A pergunta pode ser específica para o servidor SQL. Quando escrevo uma consulta como:

SELECT * FROM IndustryData WHERE Date='20131231'
AND ReportTypeID = CASE WHEN (fnQuarterDate('20131231')='20131231') THEN  1 
                        WHEN (fnQuarterDate('20131231')!='20131231') THEN  4
                        END;

A função chama fnQuarterDate (ou qualquer subconsulta) dentro de Case dentro de uma cláusula Where é executada para CADA linha da tabela?

Como seria melhor obter o valor da função (ou qualquer subconsulta) de antemão dentro de uma variável como:

DECLARE @X INT
IF fnQuarterDate('20131231')='20131231'
SET @X=1 
ELSE
SET @X=0
SELECT * FROM IndustryData WHERE Date='20131231'
AND ReportTypeID = CASE WHEN (@X = 1) THEN  1 
                        WHEN (@X = 0) THEN  4
                        END;

Eu sei que no MySQL, se houver uma subconsulta dentro de IN (..) dentro de uma cláusula WHERE, ela é executada para cada linha, eu só queria descobrir o mesmo para o SQL SERVER.

...

Basta preencher a tabela com cerca de 30 mil linhas e descobrir a diferença de horário:

Consulta1 = 70ms; Consulta 2 = 6 ms. Eu acho que isso explica, mas ainda não sabemos os fatos reais por trás disso.

Também haveria alguma diferença se, em vez de uma UDF, houvesse uma subconsulta simples?

questionAnswers(3)

yourAnswerToTheQuestion