Foi-me sugerido que o uso de instruções IF em lotes t-SQL é prejudicial ao desempenho. Estou tentando encontrar alguma confirmação ou validar esta afirmação. Estou usando o SQL Server 2005 e 2008.
A afirmação é que, com o seguinte lote:
IF @parameter = 0
BEGIN
SELECT ... something
END
ELSE
BEGIN
SELECT ... something else
END
O SQL Server não pode reutilizar o plano de execução gerado porque a próxima execução pode precisar de uma ramificação diferente. Isso implica que o SQL Server eliminará totalmente uma ramificação do plano de execução, pois, para a execução atual, ele já pode determinar qual ramificação é necessária. Isso é mesmo verdade?
Além disso, o que acontece neste caso: -
IF EXISTS (SELECT ....)
BEGIN
SELECT ... something
END
ELSE
BEGIN
SELECT ... something else
END
onde não é possível determinar antecipadamente qual ramificação será executada?