Don't forget the languages that use := for assignment! And golang, which I vaguely think can use both = and := to do slightly different assignment (assignment vs initialization?).
a := 3
...
a := 4
This is valid: a := 3
...
a = 4
As is this: a := 3
...
a, b := 4, 2
And this is an error again: a := 3
b := 4
a, b := 1, 2
Since neither a nor b are new variables.The multi-variable case is trickier, especially because (result, err) is such a common pattern and you neither want to impede the very common case of storing a result into a new variable nor to require a profusion of differently-named variables for errors that are very likely to just get folded anyway. So it allows it if any of the variables are new rather than requiring all. But clearing a large chunk of the bug surface is still much better than not.
(This is only my extrapolated reasoning, of course.)