I think it’s similar to the difference between a Vector and a Matrix. A matrix can be NxM, Nx1, or even Nx0, but a vector is constrained to being length 1 in the second dimension, even when it’s empty (to the extent that one can say it has a size in the second dimension at all, but at least it is fixed):
julia> size(Int[], 1)
0
julia> size(Int[], 2)
1
A 0-dimensional array is constrained to always containing exactly one single value, and is therefore similar to a scalar, while a vector can be empty, length 1 or length N.