Oracle
 sql >> Database >  >> RDS >> Oracle

Filtro query Oracle SQL in JOIN ON vs WHERE

Non dovrebbe esserci alcuna differenza. L'ottimizzatore dovrebbe generare lo stesso piano in entrambi i casi e dovrebbe essere in grado di applicare il predicato prima, dopo o durante l'unione in entrambi i casi in base all'approccio più efficiente per quella particolare query.

Naturalmente, il fatto che l'ottimizzatore può fare qualcosa, in generale, non garantisce che l'ottimizzatore lo farà effettivamente fare qualcosa in una particolare query. Man mano che le query diventano più complicate, diventa impossibile considerare in modo esaustivo ogni possibile piano di query, il che significa che anche con informazioni perfette e codice perfetto, l'ottimizzatore potrebbe non avere il tempo di fare tutto ciò che vorresti che facesse. Dovresti dare un'occhiata ai piani effettivi generati per le due query per vedere se sono effettivamente identici.