je pars du principe effectivement que tabb.champsb1 est un compteur, donc unique pour une valeur de user_id donné.
mais si c'est pas unique, c'est très bien que ça plante, parcequ'on ne saura pas quoi écrire. je pense que les deux autres versions que tu as donné doivent merder sévère aussi dans ce cas là, car le comportement est imprévisible : il vaut mieux planter donc.
sinon, +1 pour les jointures dans les update. en soit, je trouve ça très bien que ça existe, mais la syntaxe diffère trop d'un sgbd à l'autre, et niveau lisibilité c'est pas toujours au point...