O principal problema é que a consulta interna não pode ser relacionada ao seu
where
cláusula na update
externa , porque o filtro where se aplica primeiro à tabela que está sendo atualizada antes mesmo da execução da subconsulta interna. A maneira típica de lidar com uma situação como essa é uma atualização de várias tabelas
. Update
Competition as C
inner join (
select CompetitionId, count(*) as NumberOfTeams
from PicksPoints as p
where UserCompetitionID is not NULL
group by CompetitionID
) as A on C.CompetitionID = A.CompetitionID
set C.NumberOfTeams = A.NumberOfTeams
Demonstração:http://www.sqlfiddle.com/#!2/a74f3/1