Boolean modifier duplicates target

Hi everyone,
I am trying to use a boolean difference modifier to punch a circular hole through a hollow crate. To do this I made a new object, a cylinder, and moved it so it sticks out from both sides of the crate.

Then I select the crate object and do Add Modifier, make it a difference modifier, specify the cylinder as target and hit apply. If I understand right, this should remove everything in the crate object that overlaps the cylinder object, subdividing faces and edges as necessary. But then when I try to delete the cylinder object, I find that the cylinder has been duplicated and become part of the crate object so that even after deleting the original cylinder it still looks like I have a circular bar sticking through the crate.

Does anyone know why this happens and how to fix it?