I am trying to deploy an application on Azure Kubernetes and trying to understand when would I use Service mesh vs Ingress controller. As Istio service mesh is so powerful, why would anyone use Nginx Ingress controller?
As you mentioned service mesh (E.g. Ambassador or Istio) is very powerful tool and has great number of advantages over simple ingress controller like Nginx.
On the other hand there are users that prefer simplicity and lightweight solutions over complex systems. Nginx currently offers different features in their ingress depending on the type of subscription as listed here.
Different projects have different requirements and sometimes simple nginx ingress can be more optimal choice over service mesh. This is why some people decide to use it rather than learn how to use service mesh.
Check out this article which compares most of the popular kubernetes ingress controllers.
This article shows a great example of pushing HAproxy and Nginx combination to its limits.