Diferencia entre SpatialJoin con "... donde ..." y "unirse ... en ..."

9

Me pregunto dónde está la diferencia entre estas dos uniones espaciales y, si hay una diferencia, cuándo usar cuál.

SELECT *
FROM points p, shapes s
WHERE ST_Within(p.geom, s.geom);

y

SELECT *
FROM points p
INNER JOIN shapes s ON ST_Within(p.geom, s.geom)

¿Es uno más rápido en ciertas situaciones?

Stophface
fuente
1
La diferencia es estilística, pero cuando sus tareas se expanden para unir de doce a quince tablas, verá por qué los codificadores SQL experimentados usan JOINexclusivamente. Desafortunadamente, como está escrito, esta es más una pregunta pura de SQL, y un anzuelo de opinión .
Vince

Respuestas:

4

No hay una diferencia para ambas afirmaciones. Postgresql los convierte al mismo plan de consulta. Puede ver los planes simplemente agregando EXPLAIN ANALYZEantes de su selección y busca el resultado.

Roman Tkachuk
fuente
¿Se considera uno más rápido que el otro?
Stophface
debe ser no. Postgresql los convierte al mismo plan de consulta. Puede ver los planes simplemente agregando EXPLAIN ANALYZEantes de su selección y busca el resultado.
Roman Tkachuk
66
Prefiero el JOIN porque es demasiado fácil olvidar la condición cuando se mezcla DONDE. También con el enfoque JOIN, puede usar una IZQUIERDA para, por ejemplo, encontrar puntos que no tengan ninguna forma. No se puede hacer eso con el DÓNDE
LR1234567