CROSS APPLY no Sql Server
Sql Server APLICAR em SQL ,
"
O operador CROSS APPLY chama / executa uma Função definida pelo usuário com valor de tabela para cada linha retornada pela expressão da tabela lateral esquerda do operador CROSS APPLY.
Ele retorna apenas as linhas da expressão da tabela do lado esquerdo do operador CROSS APPLY que produz o resultado da função / expressão da tabela do lado direito da tabela com valor definido pela tabela.
Portanto, da perspectiva do resultado, podemos dizer que o CROSS APPLY é semelhante ao do clássico INNER JOIN."
Fonte: https://sqlhints.com/tag/examples-of-cross-apply/
--------testes
SELECT PROD.*,
Isnull(Round(saldo.saldo, 2), 0) AS SaldoDeposito,
( PROD.precovenda * indice.x )
FROM tabela_produtos AS PROD
CROSS apply (SELECT dbo.Fnindice_tabela(@idTabelaPreco, PROD.codigo,
@idEmpresa)
) AS indice(
x)
CROSS apply (SELECT dbo.Fncalcula_saldo_deposito(PROD.codigo, @idEmpresa,
@idDeposito)) AS
saldo(saldo)
--------------
CROSS JOIN
Especifica o produto cruzado de duas tabelas.
Retorna as mesmas linhas como se nenhuma cláusula WHERE...
"
left_table_source { CROSS | OUTER } APPLY right_table_source
Especifica que a right_table_source do operador APPLY é avaliada em cada linha da left_table_source.
Essa funcionalidade é útil quando a right_table_source contém uma função com valor de tabela que usa valores de coluna da left_table_source como um de seus argumentos.
É necessário especificar CROSS ou OUTER com APPLY.
Quando CROSS é especificado, nenhuma linha é produzida quando a right_table_source é avaliada em uma linha especificada da left_table_source e retorna um conjunto de resultados vazio.
Quando OUTER é especificado, uma linha é produzida para cada linha da left_table_source, mesmo quando a right_table_source é avaliada nessa linha e retorna um conjunto de resultados vazio.
"
Fonte: https://docs.microsoft.com/pt-br/sql/t-sql/queries/from-transact-sql?view=sql-server-ver15