this is a contraversial one. depending on how you look at it, thunderbird and the other similar behaving clients are doing the correct thing. in imap, a move is actually a copy+delete. and as imap has no concept of a 'trash folder', a delete is a message flag. so what happens when you file a message into a folder is that it is copied into the new folder, and marked as deleted from the old. when your client exits, it then 'expunges' all messages marked as deleted - this is the default behaviour from thunderbird i think. you can change it in thunderbird by going to Tools, Account Settings, <account>, Server Settings.
personally, and I don't think i'm alone on this one, I think it's crazy that the zimbra ui doesn't show this up in some way - it causes absolute chaos when people are sharing an inbox (as does happen in lots of corporate environments) using a mishmash of different clients, and is the primary reason one company i have who pay for the product never use the web interface except to set vacation messages.
read the existing bug argu-thread here:
http://bugzilla.zimbra.com/show_bug.cgi?id=2712