There are many situations where one solution could work better.
Case 1 A project has an id. If you search by id and can't find it then you could throw an exception.
Case 2 A project has a client that is optional(not assigned yet). You get the project then lazy load the client. Because it's optional a null should be returned instead of an Exception.
Case 3 A user searches for a project by name. The project might or might not exists. Is this an exceptional situation? You could say it's an exception because the person that makes the search should know what's he looking for. Or you could say you expect people to search for the wrong things and then you could return a null.
Anyway, there are 3 cases with different expected results. What's a good approach to solve this and still be consistent?