Se você tiver vários blocos IF aninhados, o SQL Server poderá armazenar planos de execução. Estou assumindo que os IFs são diretos, por exemplo. SE @Parâmetro1 NÃO É NULO
A resposta de SchmitzIT está correta de que o SQL Server também pode armazenar caminhos de execução para SQL dinâmico. No entanto, isso só é verdade se o sql for construído e executado corretamente.
Por corretamente construído, quero dizer explicitamente declarar os parâmetros e passá-los para sp_executesql. Por exemplo
declare @Param1 nvarchar(255) = 'foo'
,@Param2 nvarchar(255) = 'bar'
,@sqlcommand nvarchar(max)
,@paramList nvarchar(max)
set @paramList = '@Param1 nvarchar(255), @Param2 nvarchar(255)'
set @sqlcommand = N'Select Something from Table where Field1 = @Param1 AND Field2 = @Param2'
exec sp_executesql @statement = @sqlcommand
,@params = @paramList
,@Param1 = @Param1
,@Param2 = @Param2
Como você pode ver, o texto do comando sql não codifica os valores de parâmetro a serem usados. Eles são passados separadamente no exec sp_executesql
Se você escrever sql dinâmico antigo e ruim
set @sqlcommand = N'Select Something from Table where Field1 = ' + @Param1 + ' AND Field2 = ' + @Param2
exec sp_executesql @sqlcommand
então o SQL Server não poderá armazenar planos de execução