If I run a simple SELECT * FROM tbl, could it possibly block any other SELECTS, UPDATES, INSERTS and/or DELETES into the table I'm SELECTING from? From my knowledge, I dont think it blocks or holds exclusive locks. But I have seen a behavior where an update had been blocked while SELECTING. I know I can use the NOLOCK hint or the READ UNCOMMITED transaction isolation level. Thanks.
In general a SELECT will obtain a shared lock. This will prevent data modification statements like UPDATEs and INSERTs and DELETEs, as they will require exclusive locks, so as to not change data that might be being otherwise changed or read. Another SELECT will also require a shared lock, and will obtain it, hence the name *shared*. You are right though, that you can affect the way locks are used by changing the isolation levels. Using NOLOCK, is not a silver bullet. The database locking mechanism is extremely complex and efficient, there is often little cause to manage it yourself.