British Admiral William Hall ultimately made the decision to keep the United States in the dark about the contents of the Zimmerman telegram, but was it ethical? I think the answer depends on whose perspective you view it from.
From the perspective of Great Britain and their military efforts, it was the ethical (and right) thing to do. If Britain made the decrypted telegraph public, or even just gave it to the Americans, Germany would know that their encryption had been cracked, and Britain would immediately lose the cryptographic advantage that they had just gained. Since America was not officially in the war, and was neutral, Britain had no real loyalty to warn President Wilson. Furthermore, the unrestricted submarine warfare would start whether the Americans knew about it beforehand or not, and the British had not completely finished deciphering the message before that date came and went.
From a more global perspective of humanity, it was not an ethical decision. Admiral Hall had the opportunity to warn the United States about attacks that might harm or kill Americans, but he did not. His motives were also partly selfish for Britain, wanting American to join the war and the Allies, giving them a much-needed boost on the European front. In my opinion, a military alliance where countries don’t share intelligence about possible attacks against their allies is not a good relationship and is an unethical way to conduct such a “friendship.”
Ethics in the midst of a war are never black and white, and the Zimmerman telegram is no exception. Admiral Hall made a strategic and ethically arguable decision in keeping the telegram from the Americans, but William the human made an unethical decision in choosing to not potentially save the lives of innocent people.