@OP, if you have Python and can use it, here's an alternative
d={}
for line in open("file"):
first,second = line.strip().split(";")
d.setdefault(first,[])
d[first].append(second)
for i,j in d.iteritems():
startcounts =j.count("START")
endcounts = j.count("END")
if startcounts != endcounts:
print i,j
Well i think i should have explained more. The above code checks only for the START/END pattern. But the pattern prior is also important.
In the below case the awk will not return any rows. But it should have thrown as
ABC;START
BHY;START
Input
ABC;START
TTT;END
BHY;START
TTT;END
For every column1 ( ex: ABC ) there should be a START line and an END line ( END line need not necessary be the next line of START ) . If we dont have a END line for the column1 then we need to print that column1 (or the entire START line). Hope this explains.