Considerar:
- tabela A com chave primária "id" e chave única "nome"
- tabela B com chave estrangeira "aid" referenciando A."id"
- função (plpgsql) "f_name2id" recebendo algum "nome" e retornando o "id" correspondente
Qual das seguintes opções seria mais eficiente?
SELECT * FROM B WHERE "aid" = f_name2id(<some_name>);
SELECT B.* FROM B INNER JOIN A ON B."aid" = A."id" WHERE A."name" = <some_name>;
A segunda consulta precisa ter um desempenho melhor. A primeira consulta apenas codifica a junção de loop aninhado que a segunda consulta provavelmente executará de qualquer maneira, e tem a sobrecarga de uma chamada de função adicional.