Exploratory testing can also be called adhoc testing, but in reality, it is not quite the same.
We can say that ad hoc testing is an unpremeditated, unstructured, may be even an impetuous trip through the system with the purpose of detecting software bugs.
In turn, exploratory testing is synchronous learning, test design, and test performing. Exploratory testing is testing without beforehand prepared scenarios.
Therefore exploratory testing is often criticized - as software testers should give up planning and preparation.
To put it differently, exploratory testing is any software testing done to the extent that the software tester proactively controls the design of the tests and uses received info to design better tests.
Exploratory testers are not only keying in random data, but rather testing sections that their experience tells them are significant and then going where those tests take them.