recomendaciones - porque se dañan las tablas en mysql
SQL JOIN ¿dónde ubicar la condición WHERE? (3)
Tengo dos ejemplos siguientes.
1. Ejemplo (DONDE)
SELECT 1
FROM table1 t1
JOIN table2 t2 ON t1.id = t2.id
WHERE t2.field = true
2. Ejemplo (UNIRSE A)
SELECT 1
FROM table1 t1
JOIN table2 t2 ON t1.id = t2.id AND t2.field = true
¿Cuál es la forma más rápida en términos de rendimiento? ¿Qué prefieres?
Creo que la forma más rápida es poner el filtro en la cláusula where, porque procederá ese filtro primero en donde, y luego en la cláusula join, por lo que no habrá necesidad de permutación de filtros.
Si un filtro ingresa en una condición JOIN funcionalmente (es decir, es una condición de unión real, no solo un filtro), debe aparecer en la cláusula ON de esa unión.
Digno de notar:
Si lo coloca en la cláusula
WHERE, las interpretaciones son las mismas si la unión esINNER, de lo contrario, difiere. Como se mencionó en los comentarios, realmente no importa ya que de todos modos el resultado es diferente.Colocar el filtro en la cláusula
WHEREcuando realmente es una condiciónOUTER JOINcancela implícitamente la naturalezaOUTERde la condición ("unir incluso cuando no hay registros") ya que estos filtros implican que debe haber registros existentes en primer lugar. Ejemplo:
... table1 t LEFT JOIN table2 u ON ... AND t2.column = 5 es correcto
... table1 t LEFT JOIN table2 u ON ...
WHERE t2.column = 5
es incorrecto, ya que t2.column = 5 le dice al motor que se esperan registros de t2, lo que va en contra de la combinación externa. Excepción a esto sería un filtro IS NULL , como WHERE t2.column IS (NOT) NULL (que de hecho es una forma conveniente de construir combinaciones externas condicionales)
-
LEFTunionesLEFTyRIGHTson implícitamente unionesOUTER.
Espero que haya ayudado.
JOIN condiciones de JOIN normalmente deberían ser independientes de las condiciones del filtro. Usted define las reglas de su unión (el cómo ) con ON . Usted filtra lo que quiere con WHERE . En cuanto a rendimiento, no hay una regla general en todos los motores y diseños, por lo que su kilometraje variará mucho.