erros de compilação ocorrem durante o processo de geração de um plano de execução. Erros de tempo de execução ocorrem quando o plano é gerado e está sendo executado.
A única maneira de distinguir entre os dois é se um plano AFAIK é gerado ou não.
Exemplos
/*Parse Error*/
SELEC * FROM master..spt_values
GO
/*Bind Error*/
SELECT * FROM master..spt_values_
GO
/*Compile time - constant folding error*/
SELECT LOG(0)
FROM master..spt_values
GO
/*Runtime Error*/
DECLARE @Val int = 0
SELECT LOG(@Val)
FROM master..spt_values
Os últimos 2 geram exatamente o mesmo erro, embora um seja um erro de tempo de compilação e o outro um erro de tempo de execução.