Here's a thing that's frustrating about error handling: there are conventions, but everyone's on the honor system for following them and some big portions of .NET were designed before conventions were established. (Many of them are the REASONS we settled on certain conventions.)

You learned recently the .NET convention is, "A method should do what it says it does or throw". Sometimes people follow a different convention, like, "This method returns a special value if some error condition is met." TECHNICALLY that is still following the main convention: the method SAYS what it will do when that error condition happens, so it's still doing "what it says". Programmers really like these kinds of "technically right".

Really, though, this isn't a break from convention. The Fill method executes a query and tells you what the result of the query was. If the query syntax is invalid, it can't actually execute the query and THEN it will throw an exception. But if the query syntax is valid but wrong, the SQL server won't report an error even though you don't think "0 results" is the right response.

So, in short. If you want to "get all customers with a negative balance", this is the kind of query that will throw an exception:
Code:
SELECT START B A LOL
It's not a valid SQL query so the database will say "What the heck?" and that will get propagated back to you, probably as an exception. This query won't get you what you want, but is NOT the kind of thing that will throw an exception:
Code:
SELECT * FROM customers WHERE balance > 0
That's a positive balance, which you know is an error. But it's a valid query. The SQL server doesn't know it's the wrong query. This kind of error isn't appropriate for throwing an exception, mostly because none of the code involved has any clue it's "wrong".

Exceptions are really for "things are so wrong I can definitely tell this isn't what you wanted and I can't even figure out how to get back into a good state." But that's harder to describe than "I can't do what I say I do" and has a lot more subtlety. This is a case of, "Everything looks good to me, I can satisfy this request" even though you asked it to do the wrong thing.