It could be handy to allow jobs referencing same component BUT when WithNone make it impossible to use at same entity. For example I have similar structure to this:
var job1 = Entities.WithNone<compA>().ForEach((ref modifiedComponent, in compB)...).schedule();
var job2 = Entities.WithNone<compB>().ForEach((ref modifiedComponent, in compA)...).schedule();
JobHandle.CompleteAll(ref job1, ref job2);
As you can see, the job1 and job2 will never use same entities, since job1 will use all that have compB but not compA, and job2 will use only those that have compA but not compB.
The problem is, that safety system doesn’t know and could not know if there are any entities, that have modifiedComponent and have no compA and compB at the same time (in this case they will get into both queries). So I think it will be not possible.
BUT! in the job1 you have in compB, so it will not run without it, and in job2 you have in compA. So the code will not run without compA or compB.
If we would only limit ourselves to WithAll* and WithNone we would only need to check if there are 2 or more same component queries. If we would try to allow WithAny then it would be trickier, but we would just need to create copies for each permutation of WithAny and add it to the check. But even with that, WithAny accepts only 5 components, so in worse case scenario, that would probably never happen, produce 543*2 = 120 copies that would need to be checked once by compiler.
Of course, there could be any number of reasons why the Unity could not do this, but I do not think that it is just impossible.
*WithAll including components from ForEach((xxx)…