As vezes podemos fazer algum cálculo ou precisar buscar o último registro de alguma tabela para utilizar em outra tabela. Acho que mais comum em relatórios. O que é mais performático: utilizar CTE ou criar uma Function e chamá-la na query?
Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!
As vezes podemos fazer algum cálculo ou precisar buscar o último registro de alguma tabela para utilizar em outra tabela. Acho que mais comum em relatórios. O que é mais performático: utilizar CTE ou criar uma Function e chamá-la na query?
São propósitos diferentes, Anthue.
Uma CTE é basicamente um pedaço de código que você vai repetir em diversas queries ou que é muito complexo, então isso pode simplificar a query.
Já funções recebem parâmetros, podem executar lógicas complexas e devolver valores.
Mas às vezes posso ter um cálculo efetuado dentro de uma CTE para utiliza-lo na próxima CTE ou no resultado final. Algo como
With exemplo AS (
SELECT
ta.tabela1_id,
ta.resultado
FROM tabela
WHERE ta.tabela_id = 'xx'
)
Select
T.*,
T.coluna1 * E.resultado AS total
FROM tabela1 T
LEFT JOIN exemplo E ON e.tabela1_id = T.idEntão minha dúvida é em relação ao que seria mais performático, usar uma CTE, criar uma função e chama-la nesse SELECT da tabela1 ou até fazer um sub-SELECT. Claro, esse aqui é um exemplo super básico e pensando agora, talvez cada caso seja uma caso.
Como você disse, cada caso é um caso. Nesse seu cenário aí não vejo motivo pra usar uma função não. Nem CTE eu usaria. Eu só faria o JOIN normalmente mesmo.