Diferença entre SpatialJoin com "... where ..." e "join ... on ..."

9

Gostaria de saber onde está a diferença entre essas duas junções espaciais e, se houver alguma diferença, quando usar qual.

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

e

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

Um é mais rápido em determinadas situações?

Stophface
fonte
11
A diferença é estilística, mas quando suas tarefas se expandem para juntar doze a quinze tabelas, você verá por que os codificadores SQL experientes usam JOINexclusivamente. Infelizmente, como está escrito, isso é mais uma questão pura de SQL, e isca de opinião nisso.
Vince

Respostas:

4

Nenhuma diferença para ambas as afirmações. O Postgresql converte ambos no mesmo plano de consulta. Para ver os planos, basta adicionar EXPLAIN ANALYZEantes de selecionar e procurar o resultado.

Roman Tkachuk
fonte
um é considerado mais rápido que o outro?
Stophface #
deve ser não. O Postgresql converte ambos no mesmo plano de consulta. Para ver os planos, basta adicionar EXPLAIN ANALYZEantes de selecionar e procurar o resultado.
Roman Tkachuk
6
Eu prefiro o JOIN porque é muito fácil esquecer a condição quando misturado em WHERE. Também com a abordagem JOIN, você pode usar a ESQUERDA para, por exemplo, encontrar pontos que não estão em nenhuma forma. Você não pode fazer isso com o WHERE
LR1234567