Are these queries equivalent?
Are these queries equivalent?
Putting aside any opinions on performance, I've been trying to test a notion about whether a couple queries would output the same data (ordering doesn't matter).
SELECT * FROM articles WHERE ( last_updated >= %s OR id IN (1, 2, 3) ) AND created_at IS NOT NULL
SELECT * FROM articles WHERE last_updated >= %s AND created_at IS NOT NULL UNION SELECT * FROM articles WHERE id IN (1, 2, 3) AND created_at IS NOT NULL
I think they're equivalent, but I can't prove it to myself.
Edit: Aye, looking at the replies, I'm becoming aware that I left out a couple key assumptions I've made. Assuming:
a) id
is a PRIMARY KEY
(or otherwise UNIQUE
)
b) I mean equivalent
insofar as "the rows returned will contain equivalent data same (though maybe ordered differently)"
To answer the question asked, yes, these will “out the same data”. Anyone telling you they’re not the same isn’t looking at what you care about being the same - the rows output (regardless of order). From that perspective, and disregarding performance (as you also mentioned in your question) these queries will give you the same results.