El problema principal es que la consulta interna no se puede relacionar con su where
cláusula en el exterior update
porque el filtro where se aplica primero a la tabla que se actualiza antes de que se ejecute la subconsulta interna. La forma típica de manejar una situación como esta es una actualización de varias tablas
.
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
Demostración:http://www.sqlfiddle.com/#!2/a74f3/1