1
resposta

[Reclamação] ALTERNATICA CERTA DESCRITA COMO ERRADA

A resposta correta para essa questão, considerando o contexto de funções simples no PostgreSQL (especialmente quando não usamos RETURNS SETOF ou TABLE), é:

A primeira linha da primeira query é retornada

Como o PostgreSQL se comporta?
Quando você define uma função que retorna um tipo escalar (como RETURNS INTEGER ou RETURNS TEXT) e coloca um comando SELECT dentro dela sem usar a estrutura formal do PL/pgSQL (como o comando RETURN), o PostgreSQL segue uma regra específica:

Apenas a primeira linha: Mesmo que sua consulta resulte em 100 linhas, a função vai capturar apenas a primeira.

Apenas a primeira query: Se houver vários comandos SELECT um depois do outro, o que "manda" para o resultado final é o primeiro que foi executado.

Exemplo Visual:
Imagine que você tem uma tabela de treinos e faz o seguinte dentro de uma função:

SQL
SELECT distancia FROM treinos; -- Retorna 5km, 10km, 12km
SELECT data FROM treinos; -- Segunda query
Nesse cenário, a função retornaria apenas 5km (a primeira linha da primeira consulta).

1 resposta

Olá, Anderson! Tudo bem?

Agradeço por compartilhar sua análise com a comunidade Alura. Você trouxe um ponto interessante e a sua explicação mostra uma boa tentativa de entender o comportamento das funções no PostgreSQL.

Mas, nesse caso específico, o comportamento padrão das funções SQL no PostgreSQL considera o resultado da última query executada, e não da primeira. Ou seja, quando há múltiplos SELECT dentro da função, o valor retornado é baseado na última instrução executada, e dela é considerada a primeira linha do resultado.

Encontrei um trecho na documentação oficial do PostgreSQL que ajuda a esclarecer esse comportamento:

As funções SQL executam uma lista arbitrária de instruções SQL, retornando o resultado da última consulta da lista. No caso simples (sem conjunto de dados), a primeira linha do resultado da última consulta será retornada.

Ou seja, funções SQL retornam o resultado da última query executada, e em casos simples, é considerada a primeira linha dessa última query.

Espero ter esclarecido.

Abaixo deixo o link da documentação.

Fico à disposição para te ajudar!

Para saber mais:

Sugestão de conteúdo:

O link está em inglês, mas você poderá utilizar a tradução automática do navegador

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!