In legacy code the decision was often made on when the program was written, and then later on, many programmers simply used OPNQRYF instead of logicals because it was "easier".
Today OPNQRYF has been deprecated by embedded SQL and on v7.1 the upcoming RUNSQL command. Granted you have to pay money for stuff, but if you're looking for a recommendation on whether to use a dynamic database access language/method vs a Logical View then the answer is this:
If you need to access the file using native RPG IV I/O opcodes such as SETLL and CHAIN, then a Logical File is best.
If you need to access the file using embedded SQL or simply need the data sequenced and read "sequentially" in RPG, then a dynamic database language like SQL or OPNQRYF is best.
Having said that, SQL can also be used to create an SQL INDEX or SQL VIEW. On IBM i, these SQL objects are "logical files". So you could use SQL's data definition language to create logical views. I'm sure its not perfect yet so a simple DDS-based Logical is often a good choice too.
But for the record, OPNQRYF is almost reaching the level of "format data' (ie., S/36 SORT) in its reputation in software development. in other words, the only reason it is still being added to code today is because the Programmer hasn't taken the time to learn how to "do it in SQL" yet. Or the other "management made me do" reason.