Hay dos razones posibles para que la actualización intente convertir foo.a en NULL.
- Existen filas en foo para las que no hay filas coincidentes en bar.
- La fila coincidente en bar tiene bar.x de nulo.
Lo siguiente excluirá las actualizaciones de foo si alguna de las condiciones anteriores es verdadera. En esos casos, foo.a permanecerá como estaba:
update foo
set a = (select distinct( x ) from bar where bar.y = foo.b )
where exists
(select *
from bar
where bar.y = foo.b
and bar.x is not null);