Why should all the callers have to redundantly implement all the validity checks instead of implementing them once in the callee and reporting the result?
The callee should not return invalid results. It can return empty data or some kind of results wrapper or just throw a runtime exception of something really catastrophic happened.