Estes são resultados reais do meu banco de dados. Passei algum tempo tentando reproduzir esse comportamento com um SSCCE, mas falhei. Como o último dos resultados abaixo é possível?
SELECT COUNT(*) FROM rr.resource a
--- 15771
SELECT COUNT(*) FROM rr.resource a
NATURAL JOIN rr.interface b
--- 41419
SELECT COUNT(*)
FROM rr.resource a
NATURAL JOIN rr.interface b
NATURAL JOIN rr.interface c
--- 0
A contagem de linha zero (0) na última consulta é consistente e repetível todas as vezes. Em alguns exemplos que criei, adicionar uma segunda junção natural com a mesma tabela duas vezes resulta no mesmo número de linhas (como eu esperava). Como então o resultado acima é possível?
Basicamente,
NULL
está causando isso, porqueNULL<>NULL
. Uma das colunas em sua tabela autojuntada será todaNULL
s.Aqui está um pequeno caso de teste que mostra por que isso pode acontecer.
NULL
Igualdade impertinente e a maneira comoNATURAL JOIN
funciona, escolhendo nomes de colunas para juntar para você.Configurar:
Consultas:
A primeira consulta dará 2, a segunda consulta 1.
Seu problema será apenas uma versão mais avançada disso.
Use
JOIN .... USING
com as colunas de sua própria escolha para contornar isso.