I’m not sure if other networks do this or not (or even if they do it the same way), but when you join a channel on Freenode, it sometimes redirects you to a different channel. This has increased since their stupid “about channel” policy. Anyway, if you attempt to join a channel (like #php) and are redirected to the real channel (##php), the transport seems to get rather confused. You’ll receive messages from the wrong JID, and at least mcabber gets unhappy. I’m not sure about other clients. You can leave the channel, get a lot of weird packets, then rejoin the proper one and things are fine. I think there’s a specific numeric Freenode passes to redirect the client, but I don’t know what it is.