That's a great point. The community votes on whether an answer is helpful, so why not vote on whether a related question is actually related?
Sometimes the duplicate is blatant, but in many case it is really a judgment call. In my experience I more often vote for "reopen" than for "close", so there are definitely different attitudes to what is considered a duplicate.
Alternatively, it could be the decision of the one asking the question. Just as they select the "accepted" answer, they could choose to accept or reject the duplicate as appropriate.