Creo que lo que dijo fue que, cuando utilizaba Declaraciones preparadas, el servidor SQL podía almacenar en caché el plan de ejecución de consultas, por lo que incluso si modificaba algunos de los parámetros en la consulta en ejecución, el servidor podía elegir el incorrecto (probablemente en caché) plan de ejecución que funcionaría muy mal.
También mencionó una nueva característica de SQL Server 2008 para obligar al motor a reevaluar los planes de ejecución que usó para superar esta situación.
Con declaraciones preparadas, el único problema que tengo es esto. Considere el siguiente código de Java:
String sql = "select * from table where name like ?";
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setString(1, "PATTERN%");
ResultSet rs = pstmt.executeQuery();
Aquí se puede esperar que, si usted tiene un índice en la tabla (nombre) que será utilizada por el plan de consulta. Bueno, no lo hará. Porque PraparedStatement debe precompilar y esperar lo peor: '% PATTERN%', por ejemplo. Por lo tanto, no se optimizará. Me llevó un tiempo descubrirlo. Estaba causando que mi base de datos sufriera. :(
Espero que ayude.