The problem here is because SFML is doing double buffering.
Here's how it works: You have 2 buffers (memory for full windows). At any instance one will be the back buffer (where you draw) and one will be the front buffer (which is seen on the monitor). Calling the display() method swaps the two buffers. So you typically construct the scene entirely in the back buffer, then when finished do the display so that work becomes visible and you can wipe and start drawing again in the other buffer.
Usually this is fine since every frame you clear the buffer and draw everything, so after a swap (display() call) it all gets done again. But in your situation without the clear and only drawing everything once, half your draw calls go to one buffer and half to the other. Your tabla.jpeg is only drawn once, so it will flicker on and off because you only drew it in one buffer, not both.
Some solutions:
1 - stop double buffering. I have no idea if SFML allows that, I think it's hard coded to do it (had a quick look, didn't see a way) since 99% of use cases benefit from it.
2 - do everything twice. Draw, display, draw again, display again. That way both buffers will get everything. Not a nice solution but it would probably work.
3 - Render Texture. A render texture is like a back buffer but you own it and can draw into it when you want. You can put a render texture on a sprite or shape and draw it to the window like normal, but you can also draw into the render texture. Drawing to the render texture isn't double buffered.
Some rough pseudocode:
Draw board into the render texture
While window open
If mouse pressed
Draw tile into render texture
End
Clear window
Draw render texture
Display
End
Some code for render textures is shown here:
https://www.sfml-dev.org/tutorials/2.5/graphics-draw.php under the off screen drawing section.