El optmiser hace un buen trabajo para el uso diario. Sin embargo, en teoría podría ser necesario 3 semanas para encontrar el plan perfecto en el extremo, por lo que existe la posibilidad de que el plan generado no sea ideal.
Lo dejo en paz a menos que tenga una consulta muy compleja o grandes cantidades de datos donde simplemente no puede producir un buen plan. Entonces lo consideraría.
Pero con el tiempo, a medida que los datos cambian/crecen o los índices cambian, etc., su sugerencia de JOIN se volverá obsoleta e impedirá un plan óptimo. Una sugerencia de JOIN solo puede optimizar esa única consulta en el momento del desarrollo con ese conjunto de datos que tiene.
Personalmente, nunca he especificado una sugerencia de JOIN en ningún código de producción.
Normalmente he resuelto una mala unión al cambiar mi consulta, agregar/cambiar un índice o descomponerlo (por ejemplo, cargar una tabla temporal primero). O mi consulta fue incorrecta, o tuve una conversión de tipo de datos implícita, o resaltó un error en mi esquema, etc.
He visto a otros desarrolladores usarlos, pero solo cuando tenían vistas complejas anidadas en vistas complejas y causaron problemas posteriores cuando refactorizaron.
Editar:
tuve una conversión actual, donde algunos colegas se van a utilizar para forzar un plan de consulta mala (con NOLOCK y MAXDOP 1) a "alentar" la migración lejos del complejo legado vistas anidadas que uno de su sistema descendente llama directamente.
Editar Estoy a punto de agregar una OPCIÓN (MAXDOP 1) para evitar que un trabajador de fondo mastique toda la potencia del procesador. – Joshua