Think of it like this:
When you just draw your stuff as usual, you use a rendertarget - the backbuffer. The backbuffer is what’s shown on your monitor when the gpu has finished with the frame.
It is also treated the same way and has the same relevant properties, like width/height, format etc.
So for example if you have a 800x600 window.
You can draw your stuff as usual
SpriteBatch.Begin();
SpriteBatch.Draw(…)
[…]
SpriteBatch.End();
But you could also draw your stuff to a rendertarget and achieve the same effect
GraphicsDevice.SetRenderTarget(myRenderTarget);
SpriteBatch.Begin();
SpriteBatch.Draw(…)
[…]
SpriteBatch.End();
Now all our things are drawn to the rendertarget, but we need to draw the RenderTarget back to the screen
GraphicsDevice.SetRenderTarget(null); //Set backbuffer as rendertarget
SpriteBatch.Begin();
SpriteBatch.Draw(myRenderTarget, new Rectangle(0,0, WindowWidth , WindowHeight), Color.White);
SpriteBatch.End();
Done!
In this case it already makes sense to use a rendertarget - for example if you want your game to work with any resolution!
You can resize your window as you please, but the game will always function the same way and the output is always the same - but stretched to fit your window.
This might not look pretty but sometimes you already made a game without thinking about possibly scaling the output window and this works on every machine, with every monitor resolution.
Another neat thing you can do is for example draw your game as usual to the rendertarget (as above).
But when drawing it to the backbuffer you can manipulate the color of the whole image if you change the spritebatch.draw(… color)
So you can easily make the screen turn red or black etc.
Plus you can reuse your rendertarget in other shaders, or for example flip it vertically to simulate reflection off of some floor or water.