"(A + B) or A or B" is correct.
Remember that "A + B" is not a scalar arithmetic expression. It's a vector expression:
- for every element in vector A and B which have exactly matching label sets (apart from __name__), calculate the sum and put it in the result vector with the same set of labels
- for every element in vector A which doesn't have a corresponding label match in vector B, or vice versa, there is no result
Therefore, "null_as(0) B" makes no sense, because there are no "null" values in B. You could say there are "missing" values, but these are only "missing" when referenced to some other vector A.
"(A + B)" gives you the vector of results where labels match in both A and B. "or A" then adds appends those values where the label set only exists in A, and not in the sum (and hence implicitly not in B, since those which were in both A and B are already present). "or B" then appends those values where the label set only exists in B.