Can you elaborate how treating them differently helps?
e.g. if in your browser you wrote "microsoftoffice.com" and it took you to a different site than "microsoftoffice.com", because your browser & DNS think those are distinct strings, then that could be the basis for a scam (assuming "microsoftoffice.com" were a legitimate website - surprisingly it's currently unresolving; you'd think Microsoft would have grabbed that and made it redirect at least).
e.g. if in your DNS server code you handle new registrations by checking for existing ones, and you treat ligatures as distinct from their component characters, then you're going to allow registration of confusingly misleading domain names (as in the above example).
I say it's safer to be more lenient in equality checks by default because otherwise avoiding any of the above problems requires extra work by developers, that they often don't even realise they need to do.
These problems are in fact real, not hypothetical, sadly. Many very smart people worked on DNS internationalisation (and libraries and servers) and still screwed it up. If string equality in all these languages was not fooled by ligatures, it's much less likely we'd have these problems - those people would instead have had to go out of their way to cause these problems, which (I like to think) they would not have done.
It should ignore ligatures, yes. That it might discard the ligatures is fine (certainly the Unicode consortium currently thinks so - they wish they'd never added ligatures), as in it is the least problematic result. Or do I misunderstand why you're implying this is bad?
The more we discuss this, the stronger I feel that String should be more lenient in what it considers equal. Swift has gone to great lengths to stress that strings are not mindless sequences of bytes, to the point of making indexing into strings ergonomically difficult and computationally expensive - blasphemy by the standards of many preceding languages! I've always supported Swift in doing this, but I'm beginning to think Swift actually hasn't gone far enough.
If people really want to compare raw bytes of a string, they can (at their own peril), but they should have to do extra work to do so. They should have to turn off case-folding, or ligature equality, etc, if that's really what they want.
English upper vs lower case is still undecided in my mind. Having == treat "A" as equal to "a" would be a pretty significant departure from convention. But then, so was treating strings as Unicode at all! My goodness the howling and whinging from the C/C++ and Python and Win32 people, years ago. Yet we look back now and their hesitance (obstinance, even) seems comical and to have not aged well. So it'll be interesting to have the benefit of hindsight on this discussion, some years from now.