I'm a physicist. I'm used to mathematics needing guidance to properly represent physical reality. It starts with very simple high school problems. Consider dropping a ball: how long will it take to hit the floor. Well, it's the solution to an algebra problem:
In[24]:= Solve[ 1/2 a t^2 == h, t]
Out[24]= {{t -> -((Sqrt[2] Sqrt[h])/Sqrt[a])}, {t -> (
Sqrt[2] Sqrt[h])/Sqrt[a]}}
Oops, there are two solutions! However, the ball can't hit the floor before you drop it, so we throw out the negative one. This is completely normal.
Now, for algebra problems there are "root isolation" methods that find all solutions rigorously, and Mathematica uses them. So, you throw out the solutions you don't want and you have the solutions for your problem. However, once you go beyond algebra, you generally can't have confidence that your method, even if it has found a solution, has found every solution to your mathematical problem, nor can you be certain that the solution it has found is the solution that you want for your physical problem. You're in the realm of "experimental verification".
Comparing results from Integrate and NIntegrate is a good sort of mathematical experiment, as they have different sorts of problems. You've already encountered Integrate's branch cut trouble. NIntegrate has the problem that if its sampling of points in the function in question accidentally misses the exciting parts, it may yield an entirely bogus result.
Mathematica will not do your thinking for you.