Internally, DBPro arrays are single-dimensional. What DBPro does is take your indexes, calculate where they refer to as a offset into that array based on the dimensions that you originally provided when dimming the array, test to see if the offset is valid for the array, and then either fetch the value stored there, or raise an error.
If you know the details of how this works then it's relatively easy to predict what happens:
dim a(9, 2)
for i = 0 to 9
a(i, 0) = i ` Set column 0
next
for i = -10 to -1
print a(i, 1) ` Read back from column 1
next
wait key
end
... and no, I don't think it's the right way to handle array bounds checking.