Theoretically speaking, NJ only uses pairwise distance and ignores the detailed alignment. It does not fully utilize the information in a multi-alignment. Parsimony in some sense uses the simplest evolution model, which may deviate from the true evolution. ML and Bayesian use more information in a multi-alignment and allow you to define a model. They are better in theory. When I was working on phylogenetics, Bayesian methods gave excessively high confidence score. Personally, I did not like this "feature". I do not know if this has been resolved.
Practically speaking, ML/Bayesian are also believed to be the best. By "best", we usually mean for hundreds of branches, ML tends to recover more of them correctly. However, frequently NJ and parsimony may give a better local topology than ML. That is why we usually try multiple methods to build a tree. We cannot simply trust the ML tree alone.
There are multiple ways to evaluate the accuracy of a tree building algorithm. For gene trees with a known species phylogeny, my favorite is to infer gene losses/duplications with tree reconciliation. Given hundreds of gene trees, a method that leads to fewer overall gene losses/duplications tends to be better. With this methods, my PhD thesis suggests ML is a little better. TreeFam and Ensembl-Compara also use gene losses/duplications for tree building.
Can you please provide a reference on a source that states maximum likelihood "to be the best way to build phylogenetic tree"?