OK, eu estava olhando para reduzir isso potencialmente (como mais um exercício do que uma necessidade, lembre-se) e parece que estou recebendo este aviso sobre o que parece ser uma consulta com melhor desempenho e não na consulta que requer mais memória para executar? Isso é estranho ou estou apenas pensando demais?
Alguém quer me educar aqui (desculpem as imagens grandes)?
1ª consulta e passe o mouse sobre:
UPDATE c SET c.scust_phone = cc.scontract_holder_hphone
FROM #Claims c
INNER JOIN SCS.scs_auto_sra.scs_contracts cc ON c.icontract_id = cc.icontract_id ;
segunda consulta e passe o mouse sobre:
UPDATE c SET c.scust_phone = cc.scontract_holder_hphone
FROM #Claims c
INNER JOIN
(
SELECT icontract_id, scontract_holder_hphone
FROM SCS.scs_auto_sra.scs_contracts cc
WHERE EXISTS (SELECT icontract_id FROM #Claims x WHERE x.icontract_id = cc.icontract_id )
) cc ON c.icontract_id = cc.icontract_id ;
Na verdade, o aviso de concessão de memória excessiva usa uma lógica codificada. Ele gera um alerta quando uma certa % da memória alocada não é usada, mas não considera a quantidade de memória desperdiçada.
Ele não pode ser "confiável" e você não deve se preocupar com isso se, como neste caso, for apenas 1Mb alocado e não usado.
Já vi casos em que recebi um aviso para algo assim (1 Mb alocado, 1 Mb não usado) e casos em que havia 256Mo alocado e 136 Mo usado (portanto, 120Mo não usado) e não havia aviso.