Remember that when you perform numerical computations with floating point numbers they have a limited precision, which might lead to numerical errors. It is usual to assume in such cases that results that are very close to zero are zero indeed. Mathematica's Chop function can be used for that. Just try:
Chop[ret]
You can also check it is a precision error by using arbitray precision for your numers:
A=Table[RandomReal[WorkingPrecission->30],{i,3},{j,3}]
b=Table[RandomReal[WorkingPrecission->30],{i,3}]
M=Transpose[Join[A, {b}]]
ret=M.Join[Transpose[Join[Inverse[A], {-Inverse[A].b}]], {{0, 0, 0, 1}}]
Which will make those almost-zeros even smaller.
You can also check this tutorial for more information.