MaryAnn Xue and Allison Wang explain how Adaptive Query Execution works with Databricks:
One of the most important cost-based decisions made in the Spark optimizer is the selection of join strategies, which is based on the size estimation of the join relations. But since this estimation can go wrong in both directions, it can either result in a less efficient join strategy because of overestimation, or even worse, out-of-memory errors because of underestimation.
AQE offers a trouble-free solution here by switching to the faster broadcast hash join during execution time.
This is pretty similar to Adaptive Query Processing in SQL Server.