Podivná logika WHERE - posuďte

Dneska jsem objevil zvláštní chování některých MySQL servrů při následujícím dotazu (ten co je na konci) kvůli podmínce ve WHERE. Pohráváním si s AND a OR se dá poměrně složitě docílit správného chování dotazu, ale proč to vlastně nefunguje všude stejně? Zkuste si:

CREATE TABLE Users(
UserID INT(11) PRIMARY KEY AUTO_INCREMENT,
Jmeno VARCHAR(255)
)
CREATE TABLE Zaznamy(
ID INT PRIMARY KEY AUTO_INCREMENT,
User INT(11) UNIQUE KEY,
Zprava TEXT
)
INSERT INTO Users(UserID,Jmeno) VALUES(1,NULL)
INSERT INTO Users(UserID,Jmeno) VALUES(2,'Adam')
INSERT INTO Users(UserID,Jmeno) VALUES(3,'Martin')
INSERT INTO Zaznamy(User,Zprava) VALUES(2,'AHoJ')
INSERT INTO Zaznamy(User,Zprava) VALUES(3,'Nazdar')
INSERT INTO Zaznamy(User,Zprava) VALUES(NULL,'To jsem já')

(1)
SELECT * FROM Users,Zaznamy WHERE User=UserID OR (User=NULL AND UserID=1)

Když se na to člověk podívá, mělo by se něco vypsat, že jo. No jo, ale ono se na WZ nic nevypíše. Jak to?

Při

(2)
SELECT * FROM Users,Zaznamy WHERE User=UserID

se vypíší dva záznamy. Tak proč se nevypíší v dotazu (1), i když je podmínka splněná pro všechny řádky v tabulce Zaznamy?

Kdo to umí vysvětlit?
:+)
tyjo, tohle je spis kviz jak sql, ne?
To prvni where se mi zda uplne nesmyslne. Bud chces navazane zaznamy nebo nesmysly.
To druhe je prosty join.
Co to ma delat?
1) Nastuduj si, jak se pracuje s hodnotami NULL: User IS NULL, nikoli User=NULL
http://dev.mysql.com/doc/refman/5.1/en/working-with-null.html

2) Ve sloupci Zaznamy.User je na třetím řádku NULL, takže se nespáruje s žádným záznamem Users.ID.

Nevidím nic podivného na logice WHERE.
Jo, jasně, jsem to blbě opsal.
má být IS NULL.
Já jsem to přepisoval, abych udělal jednodušší příklad než jsem měl.

Oprava:

CREATE TABLE Users(
UserID INT(11) PRIMARY KEY AUTO_INCREMENT,
Jmeno VARCHAR(255)
)
CREATE TABLE Zaznamy(
ID INT PRIMARY KEY AUTO_INCREMENT,
User INT(11) UNIQUE KEY,
Zprava TEXT
)
INSERT INTO Users(UserID,Jmeno) VALUES(1,NULL)
INSERT INTO Users(UserID,Jmeno) VALUES(2,'Adam')
INSERT INTO Users(UserID,Jmeno) VALUES(3,'Martin')
INSERT INTO Zaznamy(User,Zprava) VALUES(2,'AHoJ')
INSERT INTO Zaznamy(User,Zprava) VALUES(3,'Nazdar')
INSERT INTO Zaznamy(User,Zprava) VALUES(NULL,'To jsem já')

(1)
SELECT * FROM Users,Zaznamy WHERE User=UserID OR (User IS NULL AND UserID=1)

Účelem je vypsat záznamy z tabulky jak provázané s tabulkou Users, tak i neprovázané s tabulkou Users. Vtip je v tom, že ty provázané je potřeba využít k zobrazení správného uživatelského jména. Prostě zjednodušený případ z praxe.
Kdybych mohl použít UNION, bylo by to bez problémů, ale na některých servrech prostě UNION nejde.
no, nechci byt urypany, ale v praxi jsem se s nicim takhle podivnym nesetkal. Vetsinou se neco takoveho jako identifikace nekoho pomoci null nepouziva. Prece jenom je to podivny stav neceho nenaplneneho, nedodelaneho....
A k tomu, co to ma delat. Koukam, ze dve veci. Proc?
Ne, jen pro vysvětlení smyslu. NULL znamená prázdné pole záznamu. To má speciální význam. Nepříklad když máte takovouhle tabulku:

Angličan Čech Němec
-----------------------------
Martin Martin
Lenka Lenka
Petr Petr Petr

A jména Martin a Lenka jsou v jiné tabulce.
Když pak chcece takovou vypsat, musíte se vypořádat s tím NULL, aby se vypsaly i tyhle řádky.

A vo tom to je. :)
Možná bych měl použít JOIN, ale ten jsem ještě úplně nepochopil, tak si ho nastuduju. Ale stejně nevim proč to na každém servru funguje jinak.
NULL (hodnota neznama, nebo chybi)