Autoencoders encode an input to a smaller representation vector (also called a latent vector) and decode that to restore the original input. For example, you can encode an image, send the encoded image to someone, and have them decode it back to the original image. This can help improve data transferring speed.
Variational Autoencoders encode an input to a certain distribution instead of a vector. So the model tries to learn the sigma and the mu for the distribution. By doing this, you now know how each encoded representation is distributed in the latent variable space, which can then help you generate images from those distributions.