Considerando as tabelas Competidor e Disputa, descritas ant...
Excetuados os títulos, o número de linhas produzidas pela execução desse comando é:
Essa é bem chatinha, mas quebrando um pouco a cabeça da para entender:
select c1.nome, c2.nome from competidor c1, competidor c2
Essa consulta é o produto cartesiano da tabela competidor com ela mesma, então como a tabela tem 6 linhas o produto cartesiano terá 36 linhas com todas as combinações possiveis.
A A, A B, A C, A D, A E, A F, B A, B B .....
select * from disputa d where d.azul = c2.nome and d.verde = c1.nome
Esse subselect aqui se você reparar bem vai ver que está selecionando os registros da tabela de disputa que batem com algum registro do resultado do produto cartesiano ali em cima. Aí que está o pulo do gato, como o produto cartesiano vai produzir todos os resultados possíveis então todos os resultados da tabela de disputa serão retornados (6).
Por fim, o where not exists pede para desconsiderar os registros que foram retornados no subselect anterior.
Ou seja, o resultado final será o produto cartesiano (36 linhas) menos as linhas da tabela de disputa (6) linhas, resultando em um total de 30 linhas.
O produto cartesiano gera todos as combinações entre competidores = 36 combinações. A cláusula where remove as que já estão na tabela disputa (considerar apenas as combinações distintas) = 6. O total de tuplas retornadas é, portanto, 36 - 6 = 30