Usar com vs declarar uma tabela temporária: desempenho / diferença?

Criei uma função sql emSQLServer 2008 que declarou uma tabela temporária e a usa para calcular uma média móvel nos valores dentro de

declare @tempTable table 
    (
        GeogType nvarchar(5),
        GeogValue nvarchar(7),
        dtAdmission date,
        timeInterval int,
        fromTime nvarchar(5),
        toTime nvarchar(5),
        EDSyndromeID tinyint,
        nVisits int
    )
insert @tempTable select * from aces.dbo.fEDVisitCounts(@geogType, @hospID,DATEADD(DD,-@windowDays + 1,@fromDate),
                @toDate,@minAge,@maxAge,@gender,@nIntervalsPerDay, @nSyndromeID)


    INSERT @table (dtAdmission,EDSyndromeID, MovingAvg) 
    SELECT list.dtadmission
        , @nSyndromeID
        , AVG(data.nVisits) as MovingAvg
    from @tempTable as list 
        inner join @tempTable as data  
    ON list.dtAdmission between data.dtAdmission and DATEADD(DD,@windowDays - 1,data.dtAdmission) 
    where list.dtAdmission >= @fromDate
    GROUP BY list.dtAdmission

mas também descobri que você pode declarar a tempTable assim:

with tempTable as 
(
    select * from aces.dbo.fEDVisitCounts('ALL', null,DATEADD(DD,-7,'01-09-2010'),
        '04-09-2010',0,130,null,1, 0)
)

Pergunta: Existe uma grande diferença nessas duas abordagens? Um é mais rápido que o outro ou mais comum / padrão? Eu acho que a declaração é mais rápida, já que você define quais são as colunas que procura .. Também seria mais rápido se eu omitisse as colunas que não foram usadas nos cálculos da média móvel? (Não tenho certeza disso uma, já que precisa obter todas as linhas de qualquer maneira, embora a seleção de menos colunas faça sentido intuitivo de que seria mais rápido / menos realizado)

Eu também encontrei umcreate temporary table @table daquiomo declarar uma tabela interna no MySQ mas não quero que a tabela persista fora da função (não tenho certeza se a tabela temporária de criação faz isso ou não

questionAnswers(3)

yourAnswerToTheQuestion