Существует три типа среднего, и то, что вы изначально используете, является средним значением - суммой всех значений, деленной на количество значений.
Возможно, вам будет удобнее получить режим - наиболее часто встречающееся значение:
select name,
(select top 1 h.run_duration
from sysjobhistory h
where h.step_id = 0
and h.job_id = j.job_id
group by h.run_duration
order by count(*) desc) run_duration
from sysjobs j
Если вы хотите избавиться от каких-либо значений, выходящих за пределы исходного стандартного отклонения, вы можете найти среднее и стандартное отклонение в подзапросе, исключить те значения, которые находятся за пределами диапазона: среднее + - стандартное отклонение, затем выполните дальнейшее усреднение оставшихся значений, но вы рискуете получить бессмысленные значения:
select oh.job_id, avg(oh.run_duration) from sysjobhistory oh
inner join (select job_id, avg(h.run_duration) avgduration,
stdev(h.run_duration) stdev_duration
from sysjobhistory h
group by job_id) as m on m.job_id = oh.job_id
where oh.step_id = 0
and abs(oh.run_duration - m.avgduration) < m.stdev_duration
group by oh.job_id