Effiiency of multiple OR predicates versus a single range Say I have a SQL statement:

SELECT * 
 FROM MyTable 
WHERE KeyColumn1 = 1 OR 
      KeyColumn1 = 2 OR 
      KeyColumn1 =3 OR
      ... 
      KeyColumn1 = 10


And another:

SELECT * 
 FROM MyTable 
WHERE KeyColumn &gt;= 1 AND 
      KeyColumn &lt;= 10


Are they actually different and which one would be more efficient?
For 10 values where you have no index, this is such a micro-optimization that you shouldn't worry about it.  The database has to read all the rows, and those reads are going to be less efficient that doing a few comparison operations.

The first can more efficiently be written as:

where KeyColumn in (1, 2, 3, 4, 5, 6, 7, 8, 9, 10)


This should have the same efficiency as the or version for most database engines.

The better question is which way of describing these values better matches the business problem?  You want the code to be easily understood and maintainable.  Use a list if that makes sense.  Use a range if that makes sense.

If you had hundreds of values, then definitely go with the second approach.  It is cleaner and easier to understand and write and should be faster.

How you write the query does affect optimization, and that in turn depends on the database engine.  Some databases are smarter about optimization than others.  Most of the effect would be on the use of indexes and the effect that other filters in the where clause have on index usage.