Me han sugerido que el uso de sentencias IF en lotes t-SQL es perjudicial para el rendimiento. Estoy tratando de encontrar alguna confirmación o validar esta afirmación. Estoy usando SQL Server 2005 y 2008.
La afirmación es que con el siguiente lote: -
IF @parameter = 0
BEGIN
SELECT ... something
END
ELSE
BEGIN
SELECT ... something else
END
SQL Server no puede reutilizar el plan de ejecución generado porque la próxima ejecución puede necesitar una rama diferente. Esto implica que SQL Server eliminará una rama por completo del plan de ejecución sobre la base de que para la ejecución actual ya puede determinar qué rama se necesita. ¿Es esto realmente cierto?
Además de lo que sucede en este caso: -
IF EXISTS (SELECT ....)
BEGIN
SELECT ... something
END
ELSE
BEGIN
SELECT ... something else
END
donde no es posible determinar de antemano qué rama se ejecutará?